чтобы в определенное время выполнялись скрипты нужно войти в файл и изменить его соответствующим образом (см. ниже).
Для того чтобы запустить выполнение каждый раз после загрузки нужно, т.е. каждый раз как ПК загрузился нужно ввести команду
@reboot /path/to/some/executable
Это запланирует выполнение задания при каждой загрузке системы.
для вывода инструкции о CRON введите команду
man 5 crontab
вот часть результата
Instead of the first five fields, one of eight special strings may appear:
string meaning ------ ------- @reboot Run once, at startup. @yearly Run once a year, "0 0 1 1 *". @annually (same as @yearly) @monthly Run once a month, "0 0 1 * *". @weekly Run once a week, "0 0 * * 0". @daily Run once a day, "0 0 * * *". @midnight (same as @daily) @hourly Run once an hour, "0 * * * *". ... # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # m h dom mon dow usercommand
URL источник — http://www.codenet.ru/webmast/php/cron.php
Названия каталогов и файлов описаны для Linux(RedHat). Для других операционных систем, названия могут отличаться, но принцип работы cron точно такой же.
Cron это программа, выполняющая задания по расписаню. Позволяет неоднократный запуск заданий. Т.е. задание можно запустить в определенное время или через определенный промежуток времени. Формат и значения полей, для пользовательских файлов crontab, будут приведены в конце статьи.
При загрузке системы, запускается демон cron и проверяет очередь заданий at и заданий пользователей в файлах crontab. При запуске, демон cron сначала проверяет каталог /var/spool/cron на наличие файлов crontab, файлы crontab имеют имена пользователей, соответствующие именам пользователей из /etc/passwd Каждый пользователь может иметь только один файл crontab, записей в файле может быть несколько.
Другими словами — файлы crontab содержат инструкции для демона cron, который запустит задание(я) описаное в файле crontab. Все файлы crontab из каталога /var/spool/cron загружаются в память, одновременно с ними загружаются файлы из /etc/cron.d После этого демон cron загружает содержимое файла /etc/crontab При стандартных настройках, содержимое /etc/crontab имеет следующий вид:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
Информация файла указывает, что:
- содержимое каталога /etc/cron.hourly будет запускаться каждый час на первой минуте часа.
- содержимое каталога /etc/cron.daily будет запускаться каждый день на второй минуте четвертого часа.
- содержимое каталога /etc/cron.weekly будет запускаться каждое воскресенье на 22’ой минуте 4’го часа.
- содержимое каталога /etc/cron.monthly будет запускаться каждый первый день месяца на 42’ой минуте 4’го часа.
SHELL=/bin/bash означает использовать для запуска команд /bin/bash , если переменная не указана, то значение будет взято из /etc/passwd для пользователя являющимся владельцем файла.
HOME=/ корневой каталог для пользователя (параметр не обязательный) При необходимости доступа к специальным свойствам интерпретатора, значения переменных SHELL и HOME можно изменить, не зависимо от того, что прописано в /etc/passwd
MAILTO=root означает кому отсылать сообщение о результате работы команд.
Все содержимое из этих каталогов будет запускаться с правами доступа пользователя root и файлы должны иметь права доступа на «выполнение» (про права доступа читай статью http://rst.void.ru/texts/chmod.txt) Поэтому перед размещением файлов в одном из этих каталогов необходимо убедиться, что сценарии не насесут вред системе.
После того, как демон cron запущен и прочел содержимое всех файлов crontab, он бездействует, просыпаясь каждую минуту и проверяя не требуется ли запуск какой-либо команды в данную минуту, или не появился ли новый файл crontab который необходимо обработать. Демон cron определяет изменения по времени модификации файлов или каталогов, такое его свойство избавляет от необходимости перезапуска демона.
Как отмечалось выше, размещение файлов для cron в каталогах
/etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
доступно только пользователю root, для использования файлов crontab пользователями, нужно использовать команду crontab. Команда служит для создания, изменения и добавления файла для демона cron
Пример
Рассмотрим пример создания файла crontab для пользователя user ,домашняя директория /home/user
Задача: запускать каждую минуту файл /home/user/mail, который будет отправлять почту
#содержимое файла mail (файл должен быть с правами на запуск! например -rwxr-xr-x) #!/bin/bash mess="test cron" echo "$mess" |mutt -s "subj" -m application/octet-stream bob@server.ru
1.Создаем временный файл /home/user/test содержимое файла test такое:
SHELL=/bin/bash MAILTO=user 0-59 * * * * /home/user/mail
2. Запускаем в терминале команду crontab /home/user/test
Все. После этого в каталоге /var/spool/cron будет создан файл «user» примерно с таким содержимым
# DO NOT EDIT THIS FILE - edit the master and reinstall. # (/home/user/test installed on Mon Mar 29 02:31:34 2004) # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) SHELL=/bin/bash MAILTO=user 0-59 * * * * /home/user/mail
и файл /home/user/mail будет запускаться демоном cron каждую минуту.
Доступ в каталог /var/spool/cron непривилегированому пользователю закрыт, что бы посмотреть юзером «user» есть ли у него файл crontab ,достаточно набрать команду crontab -l , если файл существует-будет показано его содержимое.
Для удаления файла используется команда crontab -r
Для редактирования crontab -e
Для управления файлами crontab пользователем «root» используется синтаксис:
------------------------- crontab -u user_name file -создание файла crontab ------------------------- из файла "file" для юзера "user_name"
-u означает чей crontab будет обработан, Если опция не задана, то будет обработан crontab того пользователя, который запустил команду crontab.
------------------------- crontab -u user_name -l -просмотр файла crontab ------------------------- юзера "user_name" ------------------------- crontab -u user_name -r -удаление файла crontab ------------------------- юзера "user_name" ------------------------- crontab -u user_name -e -редактирование файла crontab ------------------------- юзера "user_name" используя редактор, заданный переменной окружения VISUAL или EDITOR
Формат и значения полей
Каждая команда в пользовательском файле crontab занимает одну строку и состоит из шести полей. Пользовательские файлы crontab находятся в каталоге /var/spool/cron
Общий формат команды:
------------------------------------------------ минута час день_месяца месяц день_недели команда ------------------------------------------------ Допустимые значения: минута от 0 до 59 час от 0 до 23 день_месяца от 1 до 31 месяц от 1 до 12 (можно три буквы из названия месяца, регистр не имеет значения от jan до dec) день_недели от 0 до 6 (0 это воскресенье, можно писать от sun до sat)
Каждое из полей даты и времени может быть обозначено символом * ,будет соответствовать любому возможному значению. Для этих полей можно указывать диапазоны значений, разделенных дефисом, например:
* 5 4-10 0-3 * echo "HELLO" -печать HELLO в 5:00 на 4,5,6,7,8,9,10 дни января, февраля, марта и апреля
пошаговая запись
* */2 * * sat echo "HELLO" -печать HELLO каждый четный час, каждую субботу
равнозначная предыдущему примеру запись (списком)
* 0,2,4,6,8,10,12,14,16,18,20,22 * * sat echo "HELLO" -печать HELLO каждый четный час, каждую субботу
то же самое с указанием диапазона
* 0-23/2 * * sat echo "HELLO" -печать HELLO каждый четный час, каждую субботу 59 23 31 dec * echo "Happy new year" -без комментариев :), поздравит с новым годом
Для отладки задания cron, можно перенаправить результат в файл
Пример:
0-59 * * * * /home/user/mail 2>/tmp/tmp.cron
Если при запуске команды /home/user/mail возникнут ошибки, то они будут записаны в файл /tmp/tmp.cron и вы всегда сможете узнать причину. В случае перенаправления вывода в файл, письмо, юзеру указаному в переменной MAILTO отправлено не будет.
Посмотреть информацию о всех командах запускаемых демоном cron можно в каталоге /var/log называются cron, cron1 и т.д.
В файле /var/log/cron записано время запуска всех заданий cron за предыдущий день
Mar 29 04:03:00 rst CROND[4434]: (user) CMD (/home/user/mail) Mar 29 04:03:59 rst CROND[4493]: (user) CMD (/home/user/mail) Mar 29 04:05:00 rst CROND[4507]: (user) CMD (/home/user/mail) Mar 29 04:06:00 rst CROND[4549]: (user) CMD (/home/user/mail)
В остальных файлах cron1,cron2 находится подобная информация, но более старая чем в cron
Вот практически и все, что требуется знать для использования cron и crontab.
Вы можете скомпилировать программу, чтобы сказать, run_gpio
и сохранить ее по известному пути, например /path/to/run_gpio
. Он должен быть помечен как исполняемый для root:
$ sudo chmod 755 /path/to/run_gpio
Затем настройте init
систему Debian для запуска вашей программы.
Вы можете найти объяснение, например, здесь: http://xmodulo.com/how-to-automatically-start-program-on-boot-in-debian.html
В Debian каталог с именем /etc/init.d содержит список сценариев, которые выполняются процессом инициализации во время запуска и завершения работы. Таким образом, для автоматического запуска той или иной программы или скрипта при запуске можно создать соответствующий скрипт init.d.
$ sudo vi /etc/init.d/run_gpio
Вместо vi можно также использовать nano.Поместите эти строки в новый файл в каталоге init.d:
#! /bin/sh
# /etc/init.d/run_gpio
case "$1" in start)
/path/to/run_gpio
;; esac
Наконец, сделайте сценарий init.d исполняемым и добавьте сценарий init.d на уровень запуска по умолчанию, чтобы сценарий можно было вызывать во время загрузки (а также во время завершения работы).
$ sudo chmod 755 /etc/init.d/run_gpio
$ sudo update-rc.d run_gpio defaults
URL источник
http://xmodulo.com/how-to-automatically-start-program-on-boot-in-debian.html
Как автоматически запускать программу при загрузке в Debian 7 (хрипит)
Последнее обновление: 17 ноября 2020 г. Дэн Нанни
Если вы используете Debian 7 ( wheezy ) или более раннюю версию и хотите настроить свою систему Debian для автоматического запуска определенной программы при загрузке, вы можете использовать init
систему Debian. Как первый процесс, запускаемый при загрузке ядра, init
система управляет различными службами запуска на разных уровнях выполнения.
В этом руководстве описывается, как настроить автоматический запуск программы в Debian 7 или более ранней версии (например, Debian wheezy, сжатия и т. д.).
В Debian 7 или более ранних версиях каталог с именем /etc/init.d
содержит список сценариев, которые выполняются init
процессом во время запуска и завершения работы. Таким образом, для автоматического запуска той или иной программы или скрипта при запуске можно создать соответствующий init.d
скрипт.
Ниже приведен init.d
шаблон сценария для гипотетической службы с именем foobar
. Типичный init.d
сценарий выполняется с такими аргументами, как start
, stop
, restart
, pause
и т. д. Чтобы init.d
сценарий можно было запускать или останавливать init
во время запуска и завершения работы, сценарий должен обрабатывать как минимум аргументы start
и .stop
$ sudo vi /etc/init.d/foobar
#! /bin/sh
# /etc/init.d/foobar
# The following part always gets executed.
# Следующая часть выполняется всегда.
echo "This part always gets executed"
# The following part carries out specific functions depending on arguments.
# Следующая часть выполняет определенные функции в зависимости от аргументов.
case "$1" in
start)
echo "Starting foobar"
echo "foobar is alive"
;;
stop)
echo "Stopping foobar"
echo "foobar is dead"
;;
*)
echo "Usage: /etc/init.d/foobar {start|stop}"
exit 1
;;
esac
exit 0
Наконец, сделайте init.d
сценарий исполняемым и добавьте init.d
сценарий на уровень выполнения по умолчанию, чтобы сценарий можно было вызывать во время загрузки (а также во время завершения работы).
$ sudo chmod 755 /etc/init.d/foobar $ sudo update-rc.d foobar defaults
Позже, если вы решите удалить скрипт init.d из списка служб запуска, вы можете просто запустить следующее.
$ sudo update-rc.d -f foobar remove