[cron] Работа с Cron - rsajob/docs GitHub Wiki
Редактирование таблицы crontab:
crontab -e
запуск каждый день в 03:00
0 3 * * * root cd php /var/www/htdocs/;php index.php > /dev/null 2>&1
запуск каждst 5 минут
*/5 * * * * root cd php /var/www/htdocs/;php index.php > /dev/null 2>&1
каждые 10 минут
*/10 * * * * cd /home/srv/mysite/htdocs/user/rc/ && php -q /home/srv/mysite/htdocs/user/rc/cleandb.php
Перезапустить от рута
/etc/init.d/crond restart
По мимо cron
есть ещё комманда at
которая позволяет заплпнировать комманду на выполнение один раз
touch 1.txt | at 10:00
Что означает "> /dev/null 2>&1"?
Перенаправление вывода
Оператор > («больше чем»), как в примере выше, переадресовывает вывод программы. В данном случае, что-то отправляется в /dev/null, а что-то переадресовывается в &1.
Стандартные ввод, вывод и ошибка
Существует три стандартных значения ввода и вывода для программ. Ввод получают от клавиатуры (интерактивная, диалоговая программа), или из программы, обрабатывающей вывод другой программы. Результат программы обычно печатается в стандартной вывод и иногда в файл «STDERR» (ошибка). Все это три дескриптора файла (вы можете представить их как «потоки данных», пришли из языка программирования C), которые часто называют STDIN, STDOUT и STDERR.
Но часто к ним обращаются не по имени, а по номеру:
0 — STDIN, 1 — STDOUT и 2 — STDERR
По умолчанию, если вы не укажете номер, то будет подразумеваться STDOUT.
В нашем примере видно, что команда направляет свой стандартный вывод в /dev/null (псевдоустройство, которое может принять произвольный объём данных, не сохраняя их совершенно нигде, следовательно, подавив стандартный вывод). Затем все ошибки (то есть STDERR) перенаправить в стандартный вывод. Необходимо поставить амперсанд "&" перед номером назначения.
Смысл вкратце — "весь вывод указанной команды спихнуть в черную дыру!".
Это один из способов сделать программу по-настоящему безмолвной. Добавлю, что команда в примере аналогична команде cron job command >/dev/null 2>/dev/null
Как у нас устроено
В папке каждого сайте есть файл crontab
- это симлинк который должен лежать в /etc/cron.d
. После обновления файла надо сделать комманду доя перечитывания файлов крона
sudo /etc/init.d/crond reload
При создании сайта вызывается скрипт /usr/sbin/addcron
, он как раз создает cron-файл при создании файла и прописывает его куды надо.
Расположение файла crontab
- Mac OS X -
/usr/lib/cron/tabs/
(user cron location/usr/lib/cron/tabs/vivek
) - FreeBSD/OpenBSD/NetBSD -
/var/cron/tabs/
(user cron location/var/cron/tabs/vivek
) - CentOS/Red Hat/RHEL/Fedora/Scientific Linux -
/var/spool/cron/
(user cron location/var/spool/cron/vivek
) - Debian / Ubuntu Linux -
/var/spool/cron/crontabs/
(user cron location/var/spool/cron/crontabs/vivek
) - HP-UX Unix -
/var/spool/cron/crontabs/
(user cron location/var/spool/cron/crontabs/vivek
) - IBM AIX Unix -
/var/spool/cron/
(user cron location/var/spool/cron/vivek
)