
Для того, чтобы служба ( service ) выполняла какие-либо задачи нужно написать либо скрипт, либо программу, которая будет выполнять определенные действия по возникновению события ( будь то наступление времени или прослушивать socket, порт или любое другое ) . Итак начнем со скрипта:
Сделаем скрипт
напишем что-то вроде:
nano /root/timestamp.sh
|
1 2 3 4 5 6 7 |
#!/bin/bash # Get the current timestamp timestamp=$(date +"%Y%m%d_%H%M%S") # Define the file path file_path="/home/user/${timestamp}.txt" # Create the file touch $file_path |
Также сделаем этот скрипт исполняемым:
chmod +x /root/timestamp_script.sh
В данном случае скрипт просто зависывает в домашний каталог /home/user/ файл нулевого размера с именем, содержащим дату и время.
Подготовим файл сервиса
nanoo /etrc/systemd/system/my-service.service
|
1 2 3 4 5 6 7 8 9 10 |
[Unit] Description=My Service After=network.target # запускается только после инициализации сети [Service] ExecStart=/root/timestamp.sh Restart=always [Install] WantedBy=multi-user.target |
Где:
[Unit]— секция, которая используется для определения метаданных и зависимостей сервиса:Description=My Service— краткое описание сервиса;After=network.target— параметр, который указывает, что сервис должен запускаться после того, как начнет работу цельnetwork.target(это полезно, если служба зависит от сетевого подключения).
[Service]— секция, которая определяет поведение сервиса:ExecStart=/root/timestamp_script.sh— параметр, указывающий на команду или скрипт, который будет выполнен при запуске службы;Restart=always— параметр, значение которого означает, что сервис должен всегда перезапускаться, если он завершится.
[Install]— секция, которая определяет, при каких условиях сервис должен быть запущен:WantedBy=multi-user.target— параметр, который указывает, что служба будет связана с цельюmulti-user.target, предназначенной для обычного многопользовательского режима работы операционной системы.
Несколько советов
- Для обычного пользователя. Если служба нужна только вам и не требует системных прав, разместите файл в ~/.config/systemd/user/
. Тогда systemctl daemon-reload —user (без sudo) и управлять ею можно будет без повышенных прав. - Если служба не запускается. Частые причины: неверный путь к скрипту, отсутствие прав на выполнение, ошибка в самом скрипте, неправильные учётные записи пользователя или проблемы с зависимостями.
- Переменные окружения. Их можно задать через секцию Environment= в [Service] или через файл EnvironmentFile=.
- Таймеры. Если нужно запускать задачу не сразу при загрузке, а по расписанию или при изменении файлов, используйте юниты типа .timer