Запуск pppd из cron не работает

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

У меня есть скрипт bash под названием vpn-check.sh:

ping -c3 10.8.3.0 > pingreport
result=`grep "0 received" pingreport`
truncresult="`echo "$result" | sed 's/^\(.................................\).*$/\1/'`"
if [[ $truncresult == "3 packets transmitted, 0 received" ]]; then
  pon VPNname
fi

Когда я запускаю этот скрипт напрямую из cli, он работает и запускает ppp, но когда я запускаю то же самое через cronjob (для пользователя root), он не работает.

Я пробовал ниже и не работал

*/1 * * * * bash /root/vpn-check.sh > /root/cronlog.txt 2>&1

Я пробовал ниже и не работал

*/1 * * * * /root/vpn-check.sh > /root/cronlog.txt 2>&1

Наконец, я попробовал:

*/1 * * * * /usr/sbin/pppd call VPNname> /root/cronlog.txt 2>&1

Не могу понять, что может быть не так.


person dave    schedule 25.07.2013    source источник


Ответы (4)


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

Единственное решение, которое я нашел, это запустить:

crontab -e

и добавьте следующие строки вверху (несмотря на то, что я вызываю демон pppd по полному пути):

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
person Areeb Soo Yasir    schedule 29.04.2016
comment
Это решение! - person Eduardo Cuomo; 01.11.2017

Вам не хватает shebang из вашего сценария оболочки.

vpn-check.sh должен выглядеть так:

#!/bin/bash
ping -c3 10.8.3.0 > pingreport
result=`grep "0 received" pingreport`
truncresult="`echo "$result" | sed 's/^\(.................................\).*$/\1/'`"
if [[ $truncresult == "3 packets transmitted, 0 received" ]]; then
pon VPNname
fi

Видеть:

http://linuxconfig.org/bash-scripting-tutorial

Что означает строка #!/bin /sh означает в сценарии оболочки UNIX?

person Matt Burgess    schedule 25.07.2013

Я починил это. Все это, пока я запускал crontab -e, но для добавления имени пользователя его необходимо добавить в общесистемный файл cron, который находится в разделе /etc/crontab.

пользователь, запускающий задание, может быть добавлен только в упомянутый выше общесистемный файл cron.

person dave    schedule 26.07.2013
comment
Можете ли вы опубликовать пример? - person Eduardo Cuomo; 01.11.2017

У меня тоже была такая же проблема. Я использовал @dave answer, чтобы понять это. Вам просто нужно добавить имя пользователя в crontab. Добавьте следующую строку в конец файла /etc/crontab:

*/1 * * * * root bash /root/vpn.sh

Замените имя оболочки на свое.

person huyan    schedule 25.05.2018