Выполните задание, когда Вы соединитесь с сетью. Большинство дистрибутивов имеет инфраструктуру сценариев, которую можно включить, хотя Вы должны будете базироваться полномочия. Если Вы соединяетесь с NetworkManager или Wicd, у них есть своя собственная инфраструктура рычага также. Добавьте задание крона, которое только работает, если сеть доступна (и, дополнительно, только если задание не было выполнено выполненное в долгое время), в случае, если сеть остается связанной в течение долгого времени.
Вы не указываете свое распределение, таким образом, я дам пример для находящегося в Debian распределения. Сценарии в /etc/network/if-up.d
выполняются после того, как интерфейс поднят; посмотрите interfaces(5)
страница справочника для получения дополнительной информации. Запишите сценарий /etc/network/if-up.d/zzzz_balki_git_pull
такой как это:
#!/bin/sh
su balki -c /home/balki/bin/pull_repository_if_old
с a pull_repository_if_old
это делает что-то вроде этого (работать git pull
если сеть доступна, если нет метка времени, которая меньше чем 7 дней):
#!/bin/sh
set -e
if [ -z "$(find /path/to/.repository.pull.timestamp -mtime -7)" ] &&
ping -c 1 -w 1 repository.example.com >/dev/null 2>/dev/null
then
cd /path/to/repository
git pull
touch /path/to/.repository.pull.timestamp
fi
EOF
И crontab запись на Вашей учетной записи:
28 4 * * * /home/balki/bin/pull_repository_if_old
Вы говорите grep искать 2 места. grep только показывает все местоположение, если несколько местоположений ищутся.
Например,
touch /tmp/herp /tmp/derp
cd /tmp
echo "foo" > herp
echo "foo" > derp
Заметьте, как, если я ищу всего 1 файл, grep опускает имя файла
grep -i "foo" /tmp/herp
foo
Но если я указываю, что несколько поисковых местоположений, grep говорит, где он нашел каждое соответствие
grep -i "foo" herp derp
/tmp/derp:foo
/tmp/herp:foo
Добавление /dev/null
это обманывает grep в распечатывание полного пути путем обеспечения 2 аргументов.
man grep
:
- H, - с именем файла
Распечатайте имя файла для каждого соответствия. Это - значение по умолчанию, когда существует больше чем один файл для поиска.
Различие следует grep называемый с одним или двумя аргументами файла в этих двух случаях. Вместо добавления /dev/null
Вы могли звонить grep
с аргументом -H
. Возможно, /dev/null
поведение более широко поддерживается.
grep -H
не является портативным - /dev/null
обманите работы без GNU grep.
– Chris Down
17.02.2014, 04:19
Первый пример эквивалентен выполнению grep более чем два файла для каждого файла, найденного в результате find
выражение. Например, если find
находит три файла a.txt
, b.txt
и c.txt
затем grep
будет работать как
grep -i "madis" a.txt /dev/null
grep -i "madis" b.txt /dev/null
grep -i "madis" c.txt /dev/null
К которому grep
покажет имя файла, для которого вывод соответствует. Так как ничто не будет соответствовать/dev/null, гарантируется, что имя файла первого файла будет распечатано, если это будет соответствовать.
Принимая во внимание, что, второй пример эквивалентен из
grep -i "madis" a.txt
grep -i "madis" b.txt
grep -i "madis" c.txt
В этом случае имя файла не будет распечатано для соответствий, поскольку существует всего один аргумент.
/dev/null
должно быть уверено, что то независимо от того, что grep-редактор, не будет найдено в (пустом)/dev/null
файл, поэтому только корректные местоположения производятся" – Olivier Dulac 17.02.2014, 11:24/dev/null
Вы не тратите впустую времени seaching через непустой фиктивный файл. И наконец, намерение поиска/dev/null
очевидно для знакомых с этой идиомой. – alexis 17.02.2014, 14:10