Я не хочу, чтобы моя служба systemd запускалась при загрузке, и я не могу ее остановить.
Я создал свой собственный сценарий, службу и файлы таймера для автоматического резервного копирования в Backblaze. Я нашел 3 или 4 сообщения на форуме по этому поводу, но ни одно из этих решений мне не помогло.
Если я удалю раздел [Install]
в .service, статус изменится на static
. И он по-прежнему работает при загрузке.
Вот мой файл .service:
ryley@pop-os:~$ cat /etc/systemd/system/b2backup.service
[Unit]
Description=Backblaze Backup Script
[Service]
User=ryley
Group=ryley
Type=simple
ExecStart=/home/ryley/b2backup.sh --full --to-external
Restart=on-failure
[Install]
WantedBy=multi-user.target
Вот мой файл таймера:
ryley@pop-os:~$ cat /etc/systemd/system/b2backup.timer
[Unit]
Description=timer for Backblaze upload script
Requires=b2backup.service
[Timer]
Unit=b2backup.service
OnCalendar=Sun 03:00:00
[Install]
WantedBy=multi-user.target
Вот статус:
ryley@pop-os:~$ systemctl status b2backup.service
● b2backup.service - Backblaze Backup Script
Loaded: loaded (/etc/systemd/system/b2backup.service; disabled; vendor preset: enabled)
Active: inactive (dead) since Mon 2020-11-23 20:58:30 PST; 12h ago
TriggeredBy: ● b2backup.timer
Process: 944 ExecStart=/home/ryley/b2backup.sh --full --to-external (code=exited, status>
Main PID: 944 (code=exited, status=0/SUCCESS)
Это показывает, что служба отключена:
ryley@pop-os:~$ systemctl list-unit-files --state=disabled
UNIT FILE STATE VENDOR PRESET
proc-sys-fs-binfmt_misc.mount disabled enabled
acpid.service disabled enabled
b2backup.service disabled enabled
Любая помощь очень признателен. Я занимаюсь этим несколько часов.
Похоже, проблема в вашем файле /etc/systemd/system/b2backup.timer
.
В частности, эта строка:
Requires=b2backup.service
Из документации systemd.timer:
Для каждого файла таймера должен существовать соответствующий файл модуля, описывающий модуль, который активируется по истечении таймера. По умолчанию активирован сервис с тем же именем, что и у таймера (за исключением суффикса). Пример: файл таймера foo.timer активирует соответствующий сервис foo.service. Юнитом для активации можно управлять с помощью Unit= (см. ниже).
foo.timer
всегда будет запускать foo.service
.Systemd автоматически сопоставляет имя ('foo')Unit=someOtherService
(отличается от раздела [Unit]
) К сожалению, строка Requires=
создает зависимость . Systemd должен запустить зависимость , прежде чем сможет запустить службу или таймер.
Requires=foo
указывает systemd запустить эту службу до запуска таймера. Просто удалите строку Requires=
из вашего таймера. Вам это не нужно (systemd уже знает, какую службу запускает таймер), и это вызывает поведение, которое вам не нужно.