60

Автозапуск программ в Linux

(Кроме некоторых средств системы инициализации.)


Бывает нужно запускать программы в какое-то время или по наступлению какого-то события. Если необходимость в запуске частая, или нет возможности находиться за компьютером в нужное время, или невозможно отследить событие вручную - следует наладить автоматический запуск программ.


Традиционные в UNIX средства автозапуска программ в определённое время ("планировщики заданий") - at и cron (и их демоны с суффиксом d). Программа at запускает указанную программу однократно; cron - регулярно по расписанию. Если, конечно, компьютер в нужное время окажется включён. Иначе at запустит запоздавшую команду как можно скорее, а cron - в следующий раз (если разница во времени больше трёх часов, иначе - как можно скорее).


Запланированные команды для at принимаются из заранее подготовленного файла опцией -f или со стандартного ввода. Также программа может принимать новое задание интерактивно, подобно оболочке или cat. Сначала нужно запустить at с аргументами - временем и датой запуска (например, только время 09:30). Появится дополнительное приглашение командной строки. Ввод команды завершают клавишей Enter, а потом сочетанием Ctrl D. Введённая команда будет запущена с помощью упрощённой оболочки /bin/sh.


Формат времени здесь очень разнообразен, может включать небольшие осмысленные выражения на английском, например:


echo 'notify-send "Have a break!"' | at noon tomorrow


Выражение "at noon tomorrow" переводится как "завтра в полдень" (слово at здесь - имя программы, а не часть времени). Программа notify-send показывает на Рабочем столе всплывающее сообщение (popup message) с указанным текстом. В приведённой команде сначала идёт одиночная кавычка, потом двойные, снова двойные (замыкающие) и одиночная (замыкающая первую одиночную). Если сомневаетесь в надёжности такого способа указания даты и времени, задавайте их точно в формате "ЧЧ:ММ ДД.ММ.ГГГГ" (без кавычек и, если нужно, с ведущими нолями), например: 16:45 28.09.2018.


Программа atq показывает пронумерованную очередь заданий (job queue); подробнее о задании - at с опцией -c и номером; удалить задание - atrm и номер. Файлы "at.allow" и "at.deny" в /etc содержат списки пользователей, которым соответственно разрешено и запрещено обращаться к at.


Сама at выполняется со своим окружением (обычно root), поэтому задание на вывод видимого сообщения может провалиться. Программа notify-send не требует дополнительных действий, когда отправляете сообщение себе. Другим программам (например: xmessage или gxmessage, zenity) может понадобиться явно указать переменную дисплея:


echo 'env DISPLAY=:0.0 xmessage "Hello!"' | at 15:10


Чтобы вывести сообщение в текстовую консоль, может понадобиться перенаправить текст в выясненный заранее (программами ps, tty, w) файл консоли:


echo 'echo "Hello!" > /dev/pts/1' | at 09:30


Хотя для отправки сообщения лучше воспользоваться программой wall или write. Или локальной электронной почтой. Документация: man-страницы at, echo, mail или mailx, notify-send, tty, wall, write, xmessage.


Файлы заданий для at и cron хранятся в каталоге /var/spool/cron. Файлы общесистемных настроек cron - /etc/crontab и готовые каталоги, чьё имя начинается на cron, в /etc.


Программа crontab вызывает текстовый редактор (обычно vi) и сохраняет пользовательский файл заданий для cron (имя задавать не требуется, просто вызовите команды сохранения и выхода). Просмотреть список своих cron-заданий - crontab -l (строчная L); редактировать список - crontab -e; полное удаление своего списка - crontab -r.


Файл заданий crontab - текстовая таблица, подобно fstab. Одна строка (запись) на каждое задание. Поля: минута, час, число, месяц, день недели, пользователь (в общесистемном файле), само задание (команда). Звёздочка здесь означает "каждая единица времени" (ежечасно, ежедневно...). Последнюю строку файла традиционно следует завершать клавишей Enter. Для примера просмотрите файл /etc/crontab. Документация: man-страницы cron, crontab(1), crontab(5).


В systemd встроена своя функциональность запуска программ по времени при помощи объектов типа "таймер" (".timer"). Документация: man "systemd.timer".


Чтобы автоматически запускать какие-то программы при запуске текстового сеанса, можно записать их команды в стартовые файлы оболочки (например, в файл "~/.bashrc"). Команды следует записывать как фоновые (заканчивать символом &).


Чтобы автоматически запускать какие-то программы при запуске графического сеанса, их сценарии или файлы ".desktop" нужно поместить в каталог "~/.config/autostart" (общий каталог - /etc/xdg/autostart). Готовые файлы ".desktop" обычно хранятся в каталоге "~/.local/share/applications" (общий каталог - /usr/share/applications/). В программах настройки графических сред могут быть модули для настройки списка автозапускаемых программ. Более старый способ - добавление команд в файл-сценарий "~/.xinitrc" или "~/.xprofile" (аналогично файлу "~/.bashrc").


Набор программ "inotify tools" - средство автозапуска программ по какому-то событию файловой системы (например, если некий файл был изменён). Пример:


while true; \

do inotifywait -e modify report.txt \

&& cp report.txt report-$(date "+%Y.%m.%d_%H:%M:%S").txt; \

done


Эту команду можно было набрать в одну строку без знаков \. Здесь создан так называемый "цикл с предусловием" (while loop). Программа inotifywait наблюдает событие типа "запись" (модификация, modify) для файла "report.txt" и, получив его, завершается успешно (код завершения 0). После этого программа cp делает копию изменённого файла с именем вида report-2018.09.08_14:36:57.txt. Цикл нужен, чтобы бесконечно повторять (перезапускать) пару программ "inotifywait - cp", то есть отслеживать каждый случай записи. Проверьте это: откройте файл "report.txt" в редакторе, внесите изменения и сохраните файл. Прервать - Ctrl C. Функциональность inotify является частью ядра. Документация: man-страницы bash, inotify(7), inotifywait, "Advanced Bash-Scripting Guide" автора Mendel Cooper.

GNU/Linux

1.2K постов15.6K подписчиков

Правила сообщества

Все дистрибутивы хороши.

Будьте людьми.

1
Автор поста оценил этот комментарий
Перечитал пост три раза. Крон, Дбус, Мануал... Чуть Сатану не вызвал.
раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Это вы ещё предыдущий пост не читали - там демон на демоне и демоном погоняет.
1
Автор поста оценил этот комментарий

на самом деле, очень даже полезно


в сети просто дофига мануалов по стандартным средствам


а об этом я, за годы гугления и пользования linux-ОС даже не догадывался


автору спасибо

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Пожалуйста.

1
Автор поста оценил этот комментарий

Помню как то на собеседовании был вопрос: Как запускать программу по расписанию чаще чем раз в минуту. Оказывается у крона есть ограничения, ну по крайней мере были, давно уже не админю

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Cron всё тот же. man cron:

cron then wakes up every minute, examining all stored crontabs

1
Автор поста оценил этот комментарий

Ничего нового не узнал, но сохраню на всякий случай.

Пусть под рукой будет.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Запас карман не тянет.
0
Автор поста оценил этот комментарий
спасибо большое👍😉😊
раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Пожалуйста.

2
Автор поста оценил этот комментарий

про incron еще забыл написать. А так для новичков пойдет. Но стоит отметить, что задания крона можно создавать не только через crontab, но и с помощью файликов в /etc/cron.d/

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Про incron не знал, спасибо.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества