Самый популярный планировщик заданий в Linux — cron. Он выполняет задания, которые прописываются в конфигурационные файлы: /etc/crontab, /etc/cron.*, /var/spool/cron
Можно удалить все записи в конфигурационном файле — нажав по ошибке не ту букву.
Дело в том, что команда crontab -e используется для редактирования конф.файла, а crontab -r — для его очистки. Таким образом, можно в любой момент получить пустой файл, так как «е» и «r» на клавиатуре размещены рядом.
Обезопасить себя можно с помощью следующего скрипта:
#!/bin/bash while getopts ":r" opt do case $opt in r) read -r -n 1 -p "Do really want to remove current crontab? [Y/n]" confirm echo if [ "$confirm" != "Y" ]; then exit 1 fi ;; *);; esac done /usr/bin/crontab "$@"
Добавьте alias в файл .bashrc:
alias crontab='~/path/crontab_script.sh'
Теперь, когда Вы будете вводить команду «crontab -r«, увидите предупредительный вопрос:
Do really want to remove current crontab? [Y/n]
Cron не понимает системный PATH
К примеру, следующее задание не сработает, так как cron не сможет найти команду ping:
* * * * ping example.com
Нужно добавить переменную PATH в cron-файл:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
Или в задании указывать полный путь к команде:
* * * * /bin/ping example.com
Планирование времени запуска
1). Первая колонка содержит значения минут (0-59)
2). Вторая колонка часы (0-23)
3). Третья колонка — дни месяца (1-31)
4). Четвертая — месяцы (1-12)
5). Пятая — дни недели (0-6)
— а символ (*) означает все возможные значение и используется как шаблон.
Следующая команда будет выполняться каждую минуту, каждый час, день и месяц:
* * * * /usr/example.sh
Выполняется каждые 30 минут (каждый час, день и месяц):
30 * * * * /usr/example.sh
Каждые 15 минут:
*/15 * * * * /usr/example.sh
Каждый день в 10:30 и 18:30
30 10,18 * * * /usr/example.sh
Команда будет выполнятся только по выходным
* * * 6,7 /usr/example.sh
Выполняться в первый день масяца в 7:30 утра
30 7 1 * * /usr/example.sh
Стоит отметить, что Cron не будет работать если конфигурационный файл не заканчивается символом новой строки. Стоит убедиться, что за последней записью есть пустая строка, иначе команда не будет работать должным образом.