Как запустить работу cron при работе сети?

Вы можете щелкнуть правой кнопкой мыши по этому файлу, выбрать «свойства», а затем вкладку «открыть с», там вы можете выбрать GIMP в качестве стандартного приложения.

5
задан 19 May 2011 в 01:07

90 ответов

Я сделал cron, который выполнил тест ping на DNS-сервере, чтобы обеспечить сетевое взаимодействие. Что-то вроде этого:

  ping 8.8.8.8 -c 1 -i .2 -t 60 & gt;  / dev / null 2 ​​& amp; 1 ONLINE = $?  если [ONLINE -eq 0];  затем # Мы в автономном режиме # Мы в сети fi  

Недавно я использовал что-то вроде этого:

  #! / bin / bash function  check_online {netcat -z -w 5 8.8.8.8 53 & amp; & amp;  echo 1 ||  echo 0} # Первоначальная проверка, если мы находимся в сети. IS_ONLINE = check_online # Сколько раз мы должны проверять, если мы в сети - это предотвращает бесконечный цикл MAX_CHECKS = 5 # Начальное начальное значение для проверок CHECKS = 0 # Loop while we are  не в сети.  while [$ IS_ONLINE -eq 0];  do # Мы в автономном режиме.  Сон немного, затем снова проверьте сон 10;  IS_ONLINE = check_online CHECKS = $ [$ CHECKS + 1], если [$ CHECKS -gt $ MAX_CHECKS];  затем break fi done, если [$ IS_ONLINE -eq 0];  затем # Мы так и не смогли выйти в интернет.  Убить скрипт.  exit 1 fi # Теперь мы вводим наш обычный код здесь.  Выше было только для онлайн-проверки  

Это не САМЫЙ элегантный - я не уверен, как еще проверить через простую команду или файл в системе, но это сработало для мне при необходимости.

4
ответ дан 6 August 2018 в 04:36

Просто чтобы обернуть пару вариантов здесь в один скрипт:

  #!  / bin / bash # Этот скрипт проверяет, что интерфейс запущен, и доступно интернет-соединение. Оно основано на коде из http://askubuntu.com/questions/3299/how-to-run-cron-job-  when-network-is-up # # Затем он спит для случайного числа секунд между 30 и 600. # Это основано на коде из http://tldp.org/LDP/abs/html/randomvar.html # # Собрано  by @JonTheNiceGuy в 2015-10-15 function check_ipaddr {# Здесь мы ищем IP-адрес (v4 | v6) при выполнении ip addr # Примечание. Мы отфильтровываем 127.0.0.1 и :: 1/128, которые являются «localhost»  «ip-адреса # Я также удаляю fe80: это префикс« link local »ip addr |  \ grep -v 127.0.0.1 |  \ grep -v ':: 1/128' |  \ grep -v 'inet6 fe80:' |  \ grep -E "inet [[: digit:]] + \. [[: digit:]] + \. [[: digit:]] + \. [[: digit:]] + | inet6" |  \ wc -l} function check_google {netcat -z -w 5 8.8.8.8 53 & amp; & amp; & amp;  echo 1 ||  echo 0} до [`check_ipaddr` -gt 1];  выполнить сон 2 до [`check_google` -eq 1];  do sleep 2 done sleep $ ((RANDOM% 570 + 30))  

Я планирую поддерживать этот скрипт в https://gist.github.com/JonTheNiceGuy/5cf4a23c8f2f755a9ca4 [ ! d0]

2
ответ дан 6 August 2018 в 04:36

Я нашел, что решения ping дали мне сетевые ошибки, которые спамеровали мои журналы, если только я не манипулировал ошибками в / dev / null

Network Manager можно использовать:

  если nmcli general |  grep "^ connected" & gt; / dev / null, тогда echo "nmcli connected" fi  
0
ответ дан 6 August 2018 в 04:36

Для расширения на nixternal бинар fping отлично подходит для этого. Вы можете приготовить его в однострочном пространстве, как в

  $ fping -q yoo.mama & amp; & amp; & amp; & amp;  echo yes $ fping -q www.google.com & amp; & amp; & amp;  echo yes yes $  

Как вы видите, yoo.mama мне не нравится, но Google это делает. В crontab вы сделаете что-то вроде

  5 5 * * * root fping -q google.com & amp; & amp; & amp; & amp; & amp; & amp;  / some / script / I / want --to -run  
1
ответ дан 6 August 2018 в 04:36

Вы можете поговорить с NetworkManager, чтобы узнать, подключены вы или нет:

  $ state = $ (dbus-send --system --print-reply \ --dest = org.  freedesktop.NetworkManager \ / org / freedesktop / NetworkManager \ org.freedesktop.NetworkManager.state 2 & gt; / dev / null \ | awk '/ uint32 / {print $ 2}'), если [$ state = 3];  затем эхо "Подключено!"  else echo "Не подключено!"  fi  
2
ответ дан 6 August 2018 в 04:36
  до ifconfig eth |  grep -qE 'addr: ([[: digit:]] + \.?) +';  do sleep 2 done  
0
ответ дан 6 August 2018 в 04:36

Я создаю сценарий оболочки, который делает то, что вам нужно, т.е. проверяет подключение к сети, а затем отключает обновления. Затем вызовите скрипт из cron.

0
ответ дан 7 August 2018 в 22:46

Я сделал cron, который выполнил тест ping на DNS-сервере, чтобы обеспечить сетевое взаимодействие. Что-то вроде этого:

  ping 8.8.8.8 -c 1 -i .2 -t 60 & gt;  / dev / null 2 ​​& amp; 1 ONLINE = $?  если [ONLINE -eq 0];  затем # Мы в автономном режиме # Мы в сети fi  

Недавно я использовал что-то вроде этого:

  #! / bin / bash function  check_online {netcat -z -w 5 8.8.8.8 53 & amp; & amp;  echo 1 ||  echo 0} # Первоначальная проверка, если мы находимся в сети. IS_ONLINE = check_online # Сколько раз мы должны проверять, если мы в сети - это предотвращает бесконечный цикл MAX_CHECKS = 5 # Начальное начальное значение для проверок CHECKS = 0 # Loop while we are  не в сети.  while [$ IS_ONLINE -eq 0];  do # Мы в автономном режиме.  Сон немного, затем снова проверьте сон 10;  IS_ONLINE = check_online CHECKS = $ [$ CHECKS + 1], если [$ CHECKS -gt $ MAX_CHECKS];  затем break fi done, если [$ IS_ONLINE -eq 0];  затем # Мы так и не смогли выйти в интернет.  Убить скрипт.  exit 1 fi # Теперь мы вводим наш обычный код здесь.  Выше было только для онлайн-проверки  

Это не САМЫЙ элегантный - я не уверен, как еще проверить через простую команду или файл в системе, но это сработало для мне при необходимости.

4
ответ дан 7 August 2018 в 22:46

Я определил псевдоним bash , чтобы ответить на этот вопрос:

  alias netstate = 'ip link show |  egrep -q '\' 'UP, LOWER_UP. * state UP' \ '' & amp; & amp; & amp; & amp; & amp;  echo UP ||  echo DOWN ' 

Вы могли бы использовать его или обрабатывать вывод ip link show самостоятельно.

Для обработки «net down / net появляется "см. мой скрипт net-o-matic в net-o-matic

0
ответ дан 7 August 2018 в 22:46
  до ifconfig eth |  grep -qE 'addr: ([[: digit:]] + \.?) +';  do sleep 2 done  
0
ответ дан 7 August 2018 в 22:46

Вы можете поговорить с NetworkManager, чтобы узнать, подключены вы или нет:

  $ state = $ (dbus-send --system --print-reply \ --dest = org.  freedesktop.NetworkManager \ / org / freedesktop / NetworkManager \ org.freedesktop.NetworkManager.state 2 & gt; / dev / null \ | awk '/ uint32 / {print $ 2}'), если [$ state = 3];  затем эхо "Подключено!"  else echo "Не подключено!"  fi  
2
ответ дан 7 August 2018 в 22:46

Для расширения на nixternal бинар fping отлично подходит для этого. Вы можете приготовить его в однострочном пространстве, как в

  $ fping -q yoo.mama & amp; & amp; & amp; & amp;  echo yes $ fping -q www.google.com & amp; & amp; & amp;  echo yes yes $  

Как вы видите, yoo.mama мне не нравится, но Google это делает. В crontab вы сделаете что-то вроде

  5 5 * * * root fping -q google.com & amp; & amp; & amp; & amp; & amp; & amp;  / some / script / I / want --to -run  
1
ответ дан 7 August 2018 в 22:46

Я нашел, что решения ping дали мне сетевые ошибки, которые спамеровали мои журналы, если только я не манипулировал ошибками в / dev / null

Network Manager можно использовать:

  если nmcli general |  grep "^ connected" & gt; / dev / null, тогда echo "nmcli connected" fi  
0
ответ дан 7 August 2018 в 22:46

Просто чтобы обернуть пару вариантов здесь в один скрипт:

  #!  / bin / bash # Этот скрипт проверяет, что интерфейс запущен, и доступно интернет-соединение. Оно основано на коде из http://askubuntu.com/questions/3299/how-to-run-cron-job-  when-network-is-up # # Затем он спит для случайного числа секунд между 30 и 600. # Это основано на коде из http://tldp.org/LDP/abs/html/randomvar.html # # Собрано  by @JonTheNiceGuy в 2015-10-15 function check_ipaddr {# Здесь мы ищем IP-адрес (v4 | v6) при выполнении ip addr # Примечание. Мы отфильтровываем 127.0.0.1 и :: 1/128, которые являются «localhost»  «ip-адреса # Я также удаляю fe80: это префикс« link local »ip addr |  \ grep -v 127.0.0.1 |  \ grep -v ':: 1/128' |  \ grep -v 'inet6 fe80:' |  \ grep -E "inet [[: digit:]] + \. [[: digit:]] + \. [[: digit:]] + \. [[: digit:]] + | inet6" |  \ wc -l} function check_google {netcat -z -w 5 8.8.8.8 53 & amp; & amp; & amp;  echo 1 ||  echo 0} до [`check_ipaddr` -gt 1];  выполнить сон 2 до [`check_google` -eq 1];  do sleep 2 done sleep $ ((RANDOM% 570 + 30))  

Я планирую поддерживать этот скрипт в https://gist.github.com/JonTheNiceGuy/5cf4a23c8f2f755a9ca4 [ ! d0]

2
ответ дан 7 August 2018 в 22:46

Я определил псевдоним bash , чтобы ответить на этот вопрос:

  alias netstate = 'ip link show |  egrep -q '\' 'UP, LOWER_UP. * state UP' \ '' & amp; & amp; & amp; & amp; & amp;  echo UP ||  echo DOWN ' 

Вы могли бы использовать его или обрабатывать вывод ip link show самостоятельно.

Для обработки «net down / net появляется "см. мой скрипт net-o-matic в net-o-matic

0
ответ дан 10 August 2018 в 10:51

Я создаю сценарий оболочки, который делает то, что вам нужно, т.е. проверяет подключение к сети, а затем отключает обновления. Затем вызовите скрипт из cron.

0
ответ дан 10 August 2018 в 10:51

Я сделал cron, который выполнил тест ping на DNS-сервере, чтобы обеспечить сетевое взаимодействие. Что-то вроде этого:

  ping 8.8.8.8 -c 1 -i .2 -t 60 & gt;  / dev / null 2 ​​& amp; 1 ONLINE = $?  если [ONLINE -eq 0];  затем # Мы в автономном режиме # Мы в сети fi  

Недавно я использовал что-то вроде этого:

  #! / bin / bash function  check_online {netcat -z -w 5 8.8.8.8 53 & amp; & amp;  echo 1 ||  echo 0} # Первоначальная проверка, если мы находимся в сети. IS_ONLINE = check_online # Сколько раз мы должны проверять, если мы в сети - это предотвращает бесконечный цикл MAX_CHECKS = 5 # Начальное начальное значение для проверок CHECKS = 0 # Loop while we are  не в сети.  while [$ IS_ONLINE -eq 0];  do # Мы в автономном режиме.  Сон немного, затем снова проверьте сон 10;  IS_ONLINE = check_online CHECKS = $ [$ CHECKS + 1], если [$ CHECKS -gt $ MAX_CHECKS];  затем break fi done, если [$ IS_ONLINE -eq 0];  затем # Мы так и не смогли выйти в интернет.  Убить скрипт.  exit 1 fi # Теперь мы вводим наш обычный код здесь.  Выше было только для онлайн-проверки  

Это не САМЫЙ элегантный - я не уверен, как еще проверить через простую команду или файл в системе, но это сработало для мне при необходимости.

4
ответ дан 10 August 2018 в 10:51

Просто чтобы обернуть пару вариантов здесь в один скрипт:

  #!  / bin / bash # Этот скрипт проверяет, что интерфейс запущен, и доступно интернет-соединение. Оно основано на коде из http://askubuntu.com/questions/3299/how-to-run-cron-job-  when-network-is-up # # Затем он спит для случайного числа секунд между 30 и 600. # Это основано на коде из http://tldp.org/LDP/abs/html/randomvar.html # # Собрано  by @JonTheNiceGuy в 2015-10-15 function check_ipaddr {# Здесь мы ищем IP-адрес (v4 | v6) при выполнении ip addr # Примечание. Мы отфильтровываем 127.0.0.1 и :: 1/128, которые являются «localhost»  «ip-адреса # Я также удаляю fe80: это префикс« link local »ip addr |  \ grep -v 127.0.0.1 |  \ grep -v ':: 1/128' |  \ grep -v 'inet6 fe80:' |  \ grep -E "inet [[: digit:]] + \. [[: digit:]] + \. [[: digit:]] + \. [[: digit:]] + | inet6" |  \ wc -l} function check_google {netcat -z -w 5 8.8.8.8 53 & amp; & amp; & amp;  echo 1 ||  echo 0} до [`check_ipaddr` -gt 1];  выполнить сон 2 до [`check_google` -eq 1];  do sleep 2 done sleep $ ((RANDOM% 570 + 30))  

Я планирую поддерживать этот скрипт в https://gist.github.com/JonTheNiceGuy/5cf4a23c8f2f755a9ca4 [ ! d0]

2
ответ дан 10 August 2018 в 10:51

Я нашел, что решения ping дали мне сетевые ошибки, которые спамеровали мои журналы, если только я не манипулировал ошибками в / dev / null

Network Manager можно использовать:

  если nmcli general |  grep "^ connected" & gt; / dev / null, тогда echo "nmcli connected" fi  
0
ответ дан 10 August 2018 в 10:51

Для расширения на nixternal бинар fping отлично подходит для этого. Вы можете приготовить его в однострочном пространстве, как в

  $ fping -q yoo.mama & amp; & amp; & amp; & amp;  echo yes $ fping -q www.google.com & amp; & amp; & amp;  echo yes yes $  

Как вы видите, yoo.mama мне не нравится, но Google это делает. В crontab вы сделаете что-то вроде

  5 5 * * * root fping -q google.com & amp; & amp; & amp; & amp; & amp; & amp;  / some / script / I / want --to -run  
1
ответ дан 10 August 2018 в 10:51
  до ifconfig eth |  grep -qE 'addr: ([[: digit:]] + \.?) +';  do sleep 2 done  
0
ответ дан 10 August 2018 в 10:51

Вы можете поговорить с NetworkManager, чтобы узнать, подключены вы или нет:

  $ state = $ (dbus-send --system --print-reply \ --dest = org.  freedesktop.NetworkManager \ / org / freedesktop / NetworkManager \ org.freedesktop.NetworkManager.state 2 & gt; / dev / null \ | awk '/ uint32 / {print $ 2}'), если [$ state = 3];  затем эхо "Подключено!"  else echo "Не подключено!"  fi  
2
ответ дан 10 August 2018 в 10:51

Я определил псевдоним bash , чтобы ответить на этот вопрос:

  alias netstate = 'ip link show |  egrep -q '\' 'UP, LOWER_UP. * state UP' \ '' & amp; & amp; & amp; & amp; & amp;  echo UP ||  echo DOWN ' 

Вы могли бы использовать его или обрабатывать вывод ip link show самостоятельно.

Для обработки «net down / net появляется "см. мой скрипт net-o-matic в net-o-matic

0
ответ дан 13 August 2018 в 17:26

Я создаю сценарий оболочки, который делает то, что вам нужно, т.е. проверяет подключение к сети, а затем отключает обновления. Затем вызовите скрипт из cron.

0
ответ дан 13 August 2018 в 17:26

Я сделал cron, который выполнил тест ping на DNS-сервере, чтобы обеспечить сетевое взаимодействие. Что-то вроде этого:

  ping 8.8.8.8 -c 1 -i .2 -t 60 & gt;  / dev / null 2 ​​& amp; 1 ONLINE = $?  если [ONLINE -eq 0];  затем # Мы в автономном режиме # Мы в сети fi  

Недавно я использовал что-то вроде этого:

  #! / bin / bash function  check_online {netcat -z -w 5 8.8.8.8 53 & amp; & amp;  echo 1 ||  echo 0} # Первоначальная проверка, если мы находимся в сети. IS_ONLINE = check_online # Сколько раз мы должны проверять, если мы в сети - это предотвращает бесконечный цикл MAX_CHECKS = 5 # Начальное начальное значение для проверок CHECKS = 0 # Loop while we are  не в сети.  while [$ IS_ONLINE -eq 0];  do # Мы в автономном режиме.  Сон немного, затем снова проверьте сон 10;  IS_ONLINE = check_online CHECKS = $ [$ CHECKS + 1], если [$ CHECKS -gt $ MAX_CHECKS];  затем break fi done, если [$ IS_ONLINE -eq 0];  затем # Мы так и не смогли выйти в интернет.  Убить скрипт.  exit 1 fi # Теперь мы вводим наш обычный код здесь.  Выше было только для онлайн-проверки  

Это не САМЫЙ элегантный - я не уверен, как еще проверить через простую команду или файл в системе, но это сработало для мне при необходимости.

4
ответ дан 13 August 2018 в 17:26

Просто чтобы обернуть пару вариантов здесь в один скрипт:

  #!  / bin / bash # Этот скрипт проверяет, что интерфейс запущен, и доступно интернет-соединение. Оно основано на коде из http://askubuntu.com/questions/3299/how-to-run-cron-job-  when-network-is-up # # Затем он спит для случайного числа секунд между 30 и 600. # Это основано на коде из http://tldp.org/LDP/abs/html/randomvar.html # # Собрано  by @JonTheNiceGuy в 2015-10-15 function check_ipaddr {# Здесь мы ищем IP-адрес (v4 | v6) при выполнении ip addr # Примечание. Мы отфильтровываем 127.0.0.1 и :: 1/128, которые являются «localhost»  «ip-адреса # Я также удаляю fe80: это префикс« link local »ip addr |  \ grep -v 127.0.0.1 |  \ grep -v ':: 1/128' |  \ grep -v 'inet6 fe80:' |  \ grep -E "inet [[: digit:]] + \. [[: digit:]] + \. [[: digit:]] + \. [[: digit:]] + | inet6" |  \ wc -l} function check_google {netcat -z -w 5 8.8.8.8 53 & amp; & amp; & amp;  echo 1 ||  echo 0} до [`check_ipaddr` -gt 1];  выполнить сон 2 до [`check_google` -eq 1];  do sleep 2 done sleep $ ((RANDOM% 570 + 30))  

Я планирую поддерживать этот скрипт в https://gist.github.com/JonTheNiceGuy/5cf4a23c8f2f755a9ca4 [ ! d0]

2
ответ дан 13 August 2018 в 17:26

Я нашел, что решения ping дали мне сетевые ошибки, которые спамеровали мои журналы, если только я не манипулировал ошибками в / dev / null

Network Manager можно использовать:

  если nmcli general |  grep "^ connected" & gt; / dev / null, тогда echo "nmcli connected" fi  
0
ответ дан 13 August 2018 в 17:26

Вы можете поговорить с NetworkManager, чтобы узнать, подключены вы или нет:

  $ state = $ (dbus-send --system --print-reply \ --dest = org.  freedesktop.NetworkManager \ / org / freedesktop / NetworkManager \ org.freedesktop.NetworkManager.state 2 & gt; / dev / null \ | awk '/ uint32 / {print $ 2}'), если [$ state = 3];  затем эхо "Подключено!"  else echo "Не подключено!"  fi  
2
ответ дан 13 August 2018 в 17:26
  • 1
    Ницца. И уродливый :) Похоже, хороший кандидат на реализацию в каком-то стандартном инструменте для удобного доступа к оболочке или через Python API, поэтому он был более читабельным и не использовал магические значения, например «3». – nealmcb 19 May 2011 в 01:10

Для расширения на nixternal бинар fping отлично подходит для этого. Вы можете приготовить его в однострочном пространстве, как в

  $ fping -q yoo.mama & amp; & amp; & amp; & amp;  echo yes $ fping -q www.google.com & amp; & amp; & amp;  echo yes yes $  

Как вы видите, yoo.mama мне не нравится, но Google это делает. В crontab вы сделаете что-то вроде

  5 5 * * * root fping -q google.com & amp; & amp; & amp; & amp; & amp; & amp;  / some / script / I / want --to -run  
1
ответ дан 13 August 2018 в 17:26
  • 1
    Это не приведет к запуску команды позже, если сеть не работает. Как это можно сделать? – aperson 30 August 2010 в 10:00
  до ifconfig eth |  grep -qE 'addr: ([[: digit:]] + \.?) +';  do sleep 2 done  
0
ответ дан 13 August 2018 в 17:26
  • 1
    Этот ответ не совсем объясняет, что должен делать пользователь для решения проблемы. – TomKat 9 January 2014 в 15:15

Другие вопросы по тегам:

Похожие вопросы: