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

Странное поведение crontab

Этим вечером я впервые играл с 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.