Назад | Перейти на главную страницу

Cron не запускает команды как root

У меня есть файл под названием /scripts/checkInternet и он содержит:

#!/bin/bash
WGET="/usr/bin/wget"

rm /tmp/index.google
$WGET -q --tries=10 
           --timeout=5 http://www.google.com -O /tmp/index.google &> /dev/null
if [ ! -s /tmp/index.google ];then
        echo "Nope"
        ifdown eth0.4
        ifup eth0.4
        iptables-restore < /etc/iptables.rules
else
        echo "Connected"
fi
rm /tmp/index.google

я сделал chmod +x 755 этот файл. Я могу запустить его как root, но добавление его в cron как root не работает.

Что пошло не так? Сам cron запущен. я вижу CMD (/scripts/checkInternet) в моих системных журналах, но желаемый результат отсутствует.

99% всех проблем с запуском из cron вызваны недействительными $PATH. Я держу пари ifdown, ifup, и iptables-restore все отсутствуют по умолчанию $PATH. Вам нужно указать абсолютный путь к ним.

Сам cron запущен. Я вижу CMD (/ scripts / checkInternet) в своих системных журналах, но желаемый результат отсутствует.

Задумайтесь об этом на мгновение. Если ваш сценарий генерирует вывод или ошибки, то куда вы ожидаете, что вывод будет?

В большинстве систем Linux / Unix, если ваш скрипт производит какой-либо вывод (например, любой вывод в STDOUT или любые ошибки в STDERR), он будет отправлен по электронной почте владельцу crontab. В большинстве случаев это root.

Debian страница руководства для cron говорит:

cron будет проверять MAILTO, если у него есть какие-либо причины для отправки почты в результате выполнения команд в «this» crontab. Если MAILTO определено (и не пусто), почта отправляется пользователю с таким именем. Если MAILTO определено, но пусто (MAILTO = ""), почта отправляться не будет. В противном случае письмо будет отправлено владельцу crontab.

Итак, проверьте почту для пользователя, которому принадлежит этот crontab, или для пользователя, указанного MAILTO. Это электронное письмо должно содержать ошибку, которую вы ищете.

При тестировании я лично предпочитаю отправлять любые журналы ошибок или ошибки в файл, например:

   5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1

Или я отправляю его системный журнал с использованием регистратора, как это:

   5 0 * * *       $HOME/bin/daily.job 2>&1 | logger

А потом беги tail -f logfile во втором окне.