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

Не удается заставить cron.hourly работать

Я установил cron с помощью sudo apt-get install cron, запустил его как root и подтвердил, что он работает с

ps -ef

Затем я создал простой сценарий со следующим содержанием:

touch /home/username/cron-test.txt

Я сделал этот файл сценария исполняемым и поместил его в

mv cron-test.sh /etc/cron.hourly

Однако по какой-то причине он не запускается, и файл не создается. Я пробовал запустить его вручную, и он работает.

Я также пробовал другие сценарии cron, и они, похоже, не работают. Я что-то пропустил или неправильно использую cron?

Моя система - Ubuntu 10.10, и мой хостер урезал ее, поэтому в ней было установлено всего несколько процессов (даже не cron).

Попробуйте добавить #! /bin/sh в качестве первой строки вашего скрипта и удалив расширение, чтобы имя было /etc/cron.hourly/cron-test

Я помню, что где-то читал, что cron не запускает файлы с расширением, потому что он использует runparts, когда /ect/crontab имеет следующее содержание:

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )

Это содержание моего /etc/crontab на Ubuntu 10.04 с установленным cron (этот файл я не редактировал)

Поскольку /etc/crontab файл использует run-parts, имя файла очень ограничено (спасибо, Маттео):

run-parts runs a number of scripts or programs found in a single directory 
directory. Filenames should consist entirely of upper and lower case letters,
digits, underscores, and hyphens. Subdirectories of directory and files with
other names will be silently ignored. Scripts must follow the
#!/bin/interpretername convention in order to be executed. They will not
automatically be executed by /bin/sh. The files found will be run in the
lexical sort order of the filenames.

Вот цитата из справочной страницы run-parts:

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

Дело в том, что вы включили '.' в вашем имени файла (непосредственно перед txt). Этот период не соответствует шаблону имени файла, который run-parts использует для поиска скриптов.

Помните, что расширения файлов НЕ являются частью файловой системы! Любые расширения файлов, которые вы добавляете, являются просто частью имени файла, и поэтому, когда правила говорят «имя файла», это включает точку и расширения.

Дальше,

Для выполнения скрипты должны соответствовать соглашению #! / Bin / Interferencetername.

Это означает, что вы ДОЛЖНЫ добавить #! / Bin / bash, чтобы ваш скрипт был выполнен.