Перейти к содержимому
ToolMug

Генератор файла службы systemd

Держите программу на Node.js, Python или Go запущенной на сервере Linux, стартуйте её при загрузке и перезапускайте при сбое — не вспоминая каждую опцию systemd. Укажите команду и пользователя, выберите политику перезапуска и переменные окружения, затем скопируйте файл .service вместе с командами установки и запуска. Отметьте Запускать по расписанию, чтобы получить .timer — современную замену cron.

Работает в браузере — введённые данные никуда не загружаются

Станет именем файла, например myapp → myapp.service

Укажите полный путь к программе, например /usr/bin/python3 app.py

Команда постоянно работает на переднем плане (большинство веб-приложений и скриптов).

По одной KEY=value в строке; значения с пробелами будут взяты в кавычки автоматически.

0 оставляет значение системы по умолчанию.

myapp.service

Установка и запуск

Вставьте команды на сервере от имени root. После правки unit-файла снова выполните systemctl daemon-reload. Логи: journalctl -u <имя>.

Как пользоваться

  1. Введите имя службы, команду с полным путём и рабочий каталог.
  2. Укажите пользователя, политику перезапуска и переменные окружения.
  3. При желании включите базовую защиту или расписание (OnCalendar), чтобы создать таймер.
  4. Скопируйте созданные файлы или вставьте команды установки в оболочку 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 проще для однострочников и по-прежнему отлично работает.

Конфиденциальность

Этот инструмент работает полностью в браузере. Ваши файлы и текст обрабатываются на вашем устройстве и никогда не загружаются на наши серверы.

Похожие инструменты