我不想我的 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
非常感谢您的帮助。我已经花了几个小时了。
答案1
问题似乎出在您的/etc/systemd/system/b2backup.timer
文件中。
具体来说,这一行:
Requires=b2backup.service
对于每个计时器文件,必须存在一个匹配的单元文件,描述计时器到期时要激活的单元。默认情况下,将激活与计时器同名(后缀除外)的服务。例如:计时器文件 foo.timer 激活匹配的服务 foo.service。要激活的单元可以由 Unit= 控制(见下文)。
foo.timer
总是会触发foo.service
。Systemd 自动匹配名称 ('foo')- 要指定不同的服务文件,请使用
Unit=someOtherService
(不同于[Unit]
部分)
不幸的是,一条Requires=
线创造了一个依赖性. Systemd 必须运行依赖项前它可以启动服务或计时器。
- 一行
Requires=foo
告诉 systemd 运行该服务前启动计时器。
只需从计时器中删除该Requires=
行即可。您不需要它(systemd 已经知道计时器触发哪个服务),并且它会导致您不想要的行为。