32

Я бросил кучу дротиков, пытаясь заставить мой скрипт на python выполняться каждую минуту. Поэтому я решил упростить это, чтобы просто делать «простейшую вещь, которая могла бы работать» один раз в минуту (я запускаю debian/testing).

Я создал однострочный файл в /etc/cron.d/perminute:

* * * * * /bin/touch /home/me/ding_dong

Он принадлежит пользователю root и является исполняемым (не уверен, имеет ли это значение). И тогда я сделал:

sudo service cron reload

А потом бездельничать и снова и снова запускать ls -ltr в моем домашнем каталоге (/home/me). Но мой файл ding_dong никогда не появляется. Я знаю, что если я сделаю sudo /bin/touch /home/me/ding_dong , он сразу появится.

Очевидно, здесь что-то упущено.

3 ответа3

43

При добавлении конфигурации cron в /etc/cron.d/ или в /etc/crontab вы должны добавить имя пользователя, в каком контексте должна выполняться команда, в вашем примере

* * * * * root /bin/touch /home/me/ding_dong

И просто подсказка от меня: вам не нужно запускать ls -ltr снова и снова, просто используйте watch -n 5 "ls -ltr" и он будет запускать команду каждые 5 секунд (или любое другое значение, заменяя 5 с тем, что вы хотите).

3

Чтобы создать новое задание cron , вы должны запустить crontab -e как пользователь, которому вы хотите запустить задание. Затем добавьте соответствующую строку в появившемся окне редактора:

* * * * * /bin/touch /home/me/ding_dong

То, как вы это делаете, требует другого формата и в любом случае не очень хорошая идея. Crontabs в /etc/cron.d имеют немного другой формат, они требуют имени пользователя для запуска. Например:

* * * * * USERNAME /bin/touch /home/me/ding_dong

Хорошая уловка (как предлагает @VogonPoetLaureate) - фиксировать стандартную ошибку ваших заданий cron, которая может помочь отладить их. Например:

* * * * * /bin/touch /home/me/ding_dong 2>/tmp/error
2

Возможная ошибка здесь , как создается файл одной строки. Из документации по Ubuntu:

... строка содержит пять полей времени и даты, за которыми следует команда, за которой следует символ новой строки.

Например, этот способ создания не работает:

printf "* * * * * /bin/touch /home/me/ding_dong" > /etc/cron.d/ding_dong

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .