Для того, чтобы служба ( service ) выполняла какие-либо задачи нужно написать либо скрипт, либо программу, которая будет выполнять определенные действия по возникновению события ( будь то наступление времени или прослушивать socket, порт или любое другое ) .  Итак начнем со скрипта:

Сделаем скрипт

напишем что-то вроде:

nano /root/timestamp.sh

Также сделаем этот скрипт исполняемым:

chmod +x /root/timestamp_script.sh

В данном случае скрипт просто зависывает в домашний каталог /home/user/ файл нулевого размера с именем, содержащим дату и время.

Подготовим файл сервиса

nanoo /etrc/systemd/system/my-service.service

Где:

  1. [Unit] — секция, которая используется для определения метаданных и зависимостей сервиса:
    • Description=My Service — краткое описание сервиса;
    • After=network.target — параметр, который указывает, что сервис должен запускаться после того, как начнет работу цель network.target (это полезно, если служба зависит от сетевого подключения).
  2. [Service] — секция, которая определяет поведение сервиса:
    • ExecStart=/root/timestamp_script.sh — параметр, указывающий на команду или скрипт, который будет выполнен при запуске службы;
    • Restart=always — параметр, значение которого означает, что сервис должен всегда перезапускаться, если он завершится.
  3. [Install] — секция, которая определяет, при каких условиях сервис должен быть запущен:
    • WantedBy=multi-user.target — параметр, который указывает, что служба будет связана с целью multi-user.target, предназначенной для обычного многопользовательского режима работы операционной системы.

Несколько советов

  • Для обычного пользователя. Если служба нужна только вам и не требует системных прав, разместите файл в  ~/.config/systemd/user/
    . Тогда  systemctl daemon-reload —user  (без sudo) и управлять ею можно будет без повышенных прав.
  • Если служба не запускается. Частые причины: неверный путь к скрипту, отсутствие прав на выполнение, ошибка в самом скрипте, неправильные учётные записи пользователя или проблемы с зависимостями.
  • Переменные окружения. Их можно задать через секцию Environment=  в  [Service]  или через файл  EnvironmentFile=.
  • Таймеры. Если нужно запускать задачу не сразу при загрузке, а по расписанию или при изменении файлов, используйте юниты типа  .timer

 

 

 
 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *