Как пользоваться
- Введите имя службы, команду с полным путём и рабочий каталог.
- Укажите пользователя, политику перезапуска и переменные окружения.
- При желании включите базовую защиту или расписание (OnCalendar), чтобы создать таймер.
- Скопируйте созданные файлы или вставьте команды установки в оболочку root на сервере.
Описание параметров
- Type
- simple подходит программам, которые остаются на переднем плане; oneshot — скриптам, которые запускаются один раз, например заданиям по расписанию.
- Restart
- При ошибке перезапускает службу, если она завершилась с ошибкой или упала; Всегда перезапускает её и после нормального завершения.
- OnCalendar
- Когда срабатывает таймер, например daily или *-*-* 03:00:00 для 3 часов ночи каждый день. Выражения проверяйте командой systemd-analyze calendar.
Пример: ночное задание как таймер
Чтобы запускать скрипт каждую ночь в 3 часа, задайте «Команду (ExecStart)» /usr/local/bin/backup.sh, имя службы backup, Type oneshot и Restart «Никогда», затем отметьте «Запускать по расписанию (создать .timer)» и «Базовая защита». При пользователе и рабочем каталоге по умолчанию генератор создаёт два файла. backup.service:
[Unit]
Description=Nightly backup
[Service]
Type=oneshot
User=www-data
WorkingDirectory=/srv/myapp
ExecStart=/usr/local/bin/backup.sh
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=full
ProtectHome=read-only
и backup.timer:
[Unit]
Description=Run backup on a schedule
[Timer]
OnCalendar=*-*-* 03:00:00
Persistent=true
Unit=backup.service
[Install]
WantedBy=timers.target
Когда таймер включён, меняются две вещи. Из файла службы пропадает раздел [Install], потому что её запускает таймер, а команды установки включают таймер, а не службу:
sudo systemctl daemon-reload
sudo systemctl enable --now backup.timer
systemctl list-timers backup.timer
journalctl -u backup.service -f
Type не меняется автоматически, когда вы отмечаете параметр таймера, поэтому для заданий, которые завершаются, выберите oneshot самостоятельно. Служба oneshot в сочетании с Restart «Всегда» недопустима, поэтому генератор опускает Restart и показывает предупреждение.
Часто задаваемые вопросы
Куда положить файл?
В /etc/systemd/system/. Затем выполните systemctl daemon-reload и systemctl enable --now <имя>.service — созданные команды делают всё это.
Почему служба завершается с ошибкой «Executable path is not absolute»?
Старым версиям systemd нужен полный путь к программе в ExecStart. Найдите его командой which, например which node.
Таймер или cron?
Таймеры пишут логи в журнал, могут наверстать запуски, пропущенные при выключенном сервере, и никогда не работают дважды одновременно. cron проще для однострочников и по-прежнему отлично работает.
Конфиденциальность
Этот инструмент работает полностью в браузере. Ваши файлы и текст обрабатываются на вашем устройстве и никогда не загружаются на наши серверы.