Этим вечером я впервые играл с cron и начал испытывать странные результаты. Скрипт, который я пытаюсь запустить, - это сторожевой таймер, который позволяет мне управлять парой других скриптов с помощью веб-интерфейса. Когда я запускаю сторожевой таймер из оболочки, sudo ./watchdog.py
он работает нормально каждый раз и запускает сценарии, которые должны. Когда я добавляю его в кротаб, sudo crontab -e
с линией */1 * * * * /home/user/watchdog.py
, он не запускает их, или они вылетают сразу после запуска. Эти скрипты нужно запускать от имени пользователя root, поэтому я также пробовал */1 * * * * sudo /home/user/watchdog.py
, но ничего не изменилось.
Мой вопрос состоит из 2 частей.
1: Как мне решить эту проблему?
2: Что вызывает это и почему?
1: Как мне решить эту проблему?
Начать с записи stderr
и stdout
вашего скрипта в файл (хотя по умолчанию cron
должен отправить вам результат по почте). Вы можете сделать что-то вроде:
*/1 * * * * sudo /home/user/watchdog.py > /tmp/watchdog.log 2>&1
Это поместит любой вывод, созданный вашим скриптом, в /tmp/watchdog.log
.
К вашему сведению: обратите внимание, что */1
идентичен просто *
сам по себе.
2: Что вызывает это и почему?
Если requiretty
флаг установлен в /etc/sudoers
, затем sudo
будет работать только с настоящим TTY (например, из интерактивного сеанса входа в систему). Это не обязательно то, что здесь происходит, но это нужно проверить. Найдите линию по линиям:
Defaults requiretty
в /etc/sudoers
.