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

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

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

90 ответов

Я думаю, вы можете использовать Upstart, чтобы помочь вам там. Имейте в виду, я не тестировал этот код ниже, но что-то очень похожее.

# /etc/init/update-repositories.conf - Update local repos
#

description     "Update local repos"

# this will run the script section every time network is up
start on (net-device-up IFACE!=lo)

task

script
    svn up && git fetch
#   do some other useful stuff
end script

Это в значительной степени. Возможно, вы захотите добавить код, чтобы проверить, что он работает не очень часто. Вы также можете добавить start update-repositories в свой crontab, убедитесь, что ваше обновление произойдет, если вы постоянно находитесь в сети в течение длительного периода времени.

8
ответ дан 26 May 2018 в 01:26
  • 1
    Этот код будет запускать каждый раз, когда появляется сетевой интерфейс, в том числе каждый раз, когда ваша беспроводная сеть падает и снова соединяется. Если вы хотите, чтобы он запускался один раз в день, добавьте логику, чтобы поместить / проверить метку времени. – user535733 18 January 2014 в 09:46
  • 2
    Любая идея, работает ли это при работе с systemd? – Kevin 10 July 2015 в 23:50

Я думаю, вы можете использовать Upstart, чтобы помочь вам там. Имейте в виду, я не тестировал этот код ниже, но что-то очень похожее.

# /etc/init/update-repositories.conf - Update local repos # description "Update local repos" # this will run the script section every time network is up start on (net-device-up IFACE!=lo) task script svn up && git fetch # do some other useful stuff end script

Это в значительной степени. Возможно, вы захотите добавить код, чтобы проверить, что он работает не очень часто. Вы также можете добавить start update-repositories в свой crontab, убедитесь, что ваше обновление произойдет, если вы постоянно находитесь в сети в течение длительного периода времени.

8
ответ дан 25 July 2018 в 23:15

Я думаю, вы можете использовать Upstart, чтобы помочь вам там. Имейте в виду, я не тестировал этот код ниже, но что-то очень похожее.

# /etc/init/update-repositories.conf - Update local repos # description "Update local repos" # this will run the script section every time network is up start on (net-device-up IFACE!=lo) task script svn up && git fetch # do some other useful stuff end script

Это в значительной степени. Возможно, вы захотите добавить код, чтобы проверить, что он работает не очень часто. Вы также можете добавить start update-repositories в свой crontab, убедитесь, что ваше обновление произойдет, если вы постоянно находитесь в сети в течение длительного периода времени.

8
ответ дан 27 July 2018 в 03:30

Я думаю, вы можете использовать Upstart, чтобы помочь вам там. Имейте в виду, я не тестировал этот код ниже, но что-то очень похожее.

# /etc/init/update-repositories.conf - Update local repos # description "Update local repos" # this will run the script section every time network is up start on (net-device-up IFACE!=lo) task script svn up && git fetch # do some other useful stuff end script

Это в значительной степени. Возможно, вы захотите добавить код, чтобы проверить, что он работает не очень часто. Вы также можете добавить start update-repositories в свой crontab, убедитесь, что ваше обновление произойдет, если вы постоянно находитесь в сети в течение длительного периода времени.

8
ответ дан 31 July 2018 в 12:27

Я думаю, вы можете использовать Upstart, чтобы помочь вам там. Имейте в виду, я не тестировал этот код ниже, но что-то очень похожее.

# /etc/init/update-repositories.conf - Update local repos # description "Update local repos" # this will run the script section every time network is up start on (net-device-up IFACE!=lo) task script svn up && git fetch # do some other useful stuff end script

Это в значительной степени. Возможно, вы захотите добавить код, чтобы проверить, что он работает не очень часто. Вы также можете добавить start update-repositories в свой crontab, убедитесь, что ваше обновление произойдет, если вы постоянно находитесь в сети в течение длительного периода времени.

8
ответ дан 2 August 2018 в 04:32

Я думаю, вы можете использовать Upstart, чтобы помочь вам там. Имейте в виду, я не тестировал этот код ниже, но что-то очень похожее.

# /etc/init/update-repositories.conf - Update local repos # description "Update local repos" # this will run the script section every time network is up start on (net-device-up IFACE!=lo) task script svn up && git fetch # do some other useful stuff end script

Это в значительной степени. Возможно, вы захотите добавить код, чтобы проверить, что он работает не очень часто. Вы также можете добавить start update-repositories в свой crontab, убедитесь, что ваше обновление произойдет, если вы постоянно находитесь в сети в течение длительного периода времени.

8
ответ дан 4 August 2018 в 21:06

Я думаю, вы можете использовать Upstart , чтобы помочь вам там. Имейте в виду, что я не тестировал этот код ниже, но что-то очень похожее.

  # /etc/init/update-repositories.conf - Обновление локального репозитория # description "Обновление локальных репозиториев"  # это будет запускать секцию сценария при каждом запуске сети (net-device-up IFACE! = lo) скрипт задачи svn up & amp; & amp; & amp; & amp; & amp; & amp; & amp; & amp; & amp; & amp;  git fetch # сделать другой полезный конец конца файла  

Это в значительной степени. Возможно, вы захотите добавить код, чтобы проверить, что он работает не очень часто. Вы также можете добавить start-repositories к вашему crontab, убедитесь, что ваше обновление произойдет, если вы постоянно находитесь в сети в течение длительного периода времени.

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

Я думаю, вы можете использовать Upstart , чтобы помочь вам там. Имейте в виду, что я не тестировал этот код ниже, но что-то очень похожее.

  # /etc/init/update-repositories.conf - Обновление локального репозитория # description "Обновление локальных репозиториев"  # это будет запускать секцию сценария при каждом запуске сети (net-device-up IFACE! = lo) скрипт задачи svn up & amp; & amp; & amp; & amp; & amp; & amp; & amp; & amp; & amp; & amp;  git fetch # сделать другой полезный конец конца файла  

Это в значительной степени. Возможно, вы захотите добавить код, чтобы проверить, что он работает не очень часто. Вы также можете добавить start-repositories к вашему crontab, убедитесь, что ваше обновление произойдет, если вы постоянно находитесь в сети в течение длительного периода времени.

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

Я думаю, вы можете использовать Upstart , чтобы помочь вам там. Имейте в виду, что я не тестировал этот код ниже, но что-то очень похожее.

  # /etc/init/update-repositories.conf - Обновление локального репозитория # description "Обновление локальных репозиториев"  # это будет запускать секцию сценария при каждом запуске сети (net-device-up IFACE! = lo) скрипт задачи svn up & amp; & amp; & amp; & amp; & amp; & amp; & amp; & amp; & amp; & amp;  git fetch # сделать другой полезный конец конца файла  

Это в значительной степени. Возможно, вы захотите добавить код, чтобы проверить, что он работает не очень часто. Вы также можете добавить start-repositories к вашему crontab, убедитесь, что ваше обновление произойдет, если вы постоянно находитесь в сети в течение длительного периода времени.

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

Я думаю, вы можете использовать Upstart , чтобы помочь вам там. Имейте в виду, что я не тестировал этот код ниже, но что-то очень похожее.

  # /etc/init/update-repositories.conf - Обновление локального репозитория # description "Обновление локальных репозиториев"  # это будет запускать секцию сценария при каждом запуске сети (net-device-up IFACE! = lo) скрипт задачи svn up & amp; & amp; & amp; & amp; & amp; & amp; & amp; & amp; & amp; & amp;  git fetch # сделать другой полезный конец конца файла  

Это в значительной степени. Возможно, вы захотите добавить код, чтобы проверить, что он работает не очень часто. Вы также можете добавить start-repositories к вашему crontab, убедитесь, что ваше обновление произойдет, если вы постоянно находитесь в сети в течение длительного периода времени.

8
ответ дан 13 August 2018 в 17:26
  • 1
    Этот код будет запускать каждый время, когда появляется сетевой интерфейс, включая каждый раз, когда ваша беспроводная сеть падает и снова соединяется. Если вы хотите, чтобы он запускался один раз в день, добавьте логику, чтобы поместить / проверить метку времени. – user535733 18 January 2014 в 09:46
  • 2
    Любая идея, работает ли это при работе с systemd? – Kevin 10 July 2015 в 23:50

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

ping 8.8.8.8 -c 1 -i .2 -t 60 > /dev/null 2>&1
ONLINE=$?

if [ ONLINE -eq 0 ]; then
    #We're offline
else
    #We're online
fi

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

#!/bin/bash

function check_online
{
    netcat -z -w 5 8.8.8.8 53 && echo 1 || echo 0
}

# Initial check to see if we are online
IS_ONLINE=check_online
# How many times we should check if we're online - this prevents infinite looping
MAX_CHECKS=5
# Initial starting value for checks
CHECKS=0

# Loop while we're not online.
while [ $IS_ONLINE -eq 0 ]; do
    # We're offline. Sleep for a bit, then check again

    sleep 10;
    IS_ONLINE=check_online

    CHECKS=$[ $CHECKS + 1 ]
    if [ $CHECKS -gt $MAX_CHECKS ]; then
        break
    fi
done

if [ $IS_ONLINE -eq 0 ]; then
    # We never were able to get online. Kill script.
    exit 1
fi

# Now we enter our normal code here. The above was just for online checking

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

4
ответ дан 26 May 2018 в 01:26

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

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

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

#! /bin/bash
# This script checks that the interface is up, and that an internet connection is available
# It is based on code from http://askubuntu.com/questions/3299/how-to-run-cron-job-when-network-is-up
#
# Then it sleeps for a random number of seconds between 30 and 600.
# This is based on code from http://tldp.org/LDP/abs/html/randomvar.html
#
# Collated by @JonTheNiceGuy on 2015-10-15

function check_ipaddr
{
  # Here we look for an IP(v4|v6) address when doing ip addr
  # Note we're filtering out 127.0.0.1 and ::1/128 which are the "localhost" ip addresses
  # I'm also removing fe80: which is the "link local" prefix

  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 && echo 1 || echo 0
}

until [ `check_ipaddr` -gt 1 ]; do
  sleep 2
done

until [ `check_google` -eq 1 ]; do
  sleep 2
done

sleep $((RANDOM%570+30))

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

2
ответ дан 26 May 2018 в 01:26

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

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

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

5 5 * * *  root   fping -q google.com && /some/script/I/want --to --run
1
ответ дан 26 May 2018 в 01:26
  • 1
    Это не приведет к запуску команды позже, если сеть не работает. Как это можно сделать? – aperson 30 August 2010 в 10:00

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

0
ответ дан 26 May 2018 в 01:26
[F1]
0
ответ дан 26 May 2018 в 01:26
  • 1
    Этот ответ не совсем объясняет, что должен делать пользователь для решения проблемы. – TomKat 9 January 2014 в 15:15

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

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

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

To ручка "net down / net come up" см. мой скрипт net-o-matic в net-o-matic

0
ответ дан 26 May 2018 в 01:26

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

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

if nmcli general | grep "^connected" >/dev/null
then
   echo "nmcli connected"
fi
0
ответ дан 26 May 2018 в 01:26
[F1]
0
ответ дан 25 July 2018 в 23:15
  • 1
    Этот ответ не совсем объясняет, что должен делать пользователь для решения проблемы. – TomKat 9 January 2014 в 15:15

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

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

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

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

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

5 5 * * * root fping -q google.com && /some/script/I/want --to --run
1
ответ дан 25 July 2018 в 23:15
  • 1
    Это не приведет к запуску команды позже, если сеть не работает. Как это можно сделать? – aperson 30 August 2010 в 10:00

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

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

if nmcli general | grep "^connected" >/dev/null then echo "nmcli connected" fi
0
ответ дан 25 July 2018 в 23:15

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

#! /bin/bash # This script checks that the interface is up, and that an internet connection is available # It is based on code from http://askubuntu.com/questions/3299/how-to-run-cron-job-when-network-is-up # # Then it sleeps for a random number of seconds between 30 and 600. # This is based on code from http://tldp.org/LDP/abs/html/randomvar.html # # Collated by @JonTheNiceGuy on 2015-10-15 function check_ipaddr { # Here we look for an IP(v4|v6) address when doing ip addr # Note we're filtering out 127.0.0.1 and ::1/128 which are the "localhost" ip addresses # I'm also removing fe80: which is the "link local" prefix 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 && echo 1 || echo 0 } until [ `check_ipaddr` -gt 1 ]; do sleep 2 done until [ `check_google` -eq 1 ]; do sleep 2 done sleep $((RANDOM%570+30))

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

2
ответ дан 25 July 2018 в 23:15

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

0
ответ дан 25 July 2018 в 23:15

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

ping 8.8.8.8 -c 1 -i .2 -t 60 > /dev/null 2>&1 ONLINE=$? if [ ONLINE -eq 0 ]; then #We're offline else #We're online fi

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

#!/bin/bash function check_online { netcat -z -w 5 8.8.8.8 53 && echo 1 || echo 0 } # Initial check to see if we are online IS_ONLINE=check_online # How many times we should check if we're online - this prevents infinite looping MAX_CHECKS=5 # Initial starting value for checks CHECKS=0 # Loop while we're not online. while [ $IS_ONLINE -eq 0 ]; do # We're offline. Sleep for a bit, then check again sleep 10; IS_ONLINE=check_online CHECKS=$[ $CHECKS + 1 ] if [ $CHECKS -gt $MAX_CHECKS ]; then break fi done if [ $IS_ONLINE -eq 0 ]; then # We never were able to get online. Kill script. exit 1 fi # Now we enter our normal code here. The above was just for online checking

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

4
ответ дан 25 July 2018 в 23:15

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

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

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

To ручка "net down / net come up" см. мой скрипт net-o-matic в net-o-matic

0
ответ дан 25 July 2018 в 23:15
[F1]
0
ответ дан 27 July 2018 в 03:30
  • 1
    Этот ответ не совсем объясняет, что должен делать пользователь для решения проблемы. – TomKat 9 January 2014 в 15:15

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

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

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

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

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

5 5 * * * root fping -q google.com && /some/script/I/want --to --run
1
ответ дан 27 July 2018 в 03:30
  • 1
    Это не приведет к запуску команды позже, если сеть не работает. Как это можно сделать? – aperson 30 August 2010 в 10:00

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

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

if nmcli general | grep "^connected" >/dev/null then echo "nmcli connected" fi
0
ответ дан 27 July 2018 в 03:30

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

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