停止 systemd 服务在启动时运行

停止 systemd 服务在启动时运行

我不想我的 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

来自systemd.timer 文档

对于每个计时器文件,必须存在一个匹配的单元文件,描述计时器到期时要激活的单元。默认情况下,将激活与计时器同名(后缀除外)的服务。例如:计时器文件 foo.timer 激活匹配的服务 foo.service。要激活的单元可以由 Unit= 控制(见下文)。

  • foo.timer总是会触发foo.service。Systemd 自动匹配名称 ('foo')
  • 要指定不同的服务文件,请使用Unit=someOtherService(不同于[Unit]部分)

不幸的是,一条Requires=线创造了一个依赖性. Systemd 必须运行依赖项它可以启动服务或计时器。

  • 一行Requires=foo告诉 systemd 运行该服务启动计时器。

只需从计时器中删除该Requires=行即可。您不需要它(systemd 已经知道计时器触发哪个服务),并且它会导致您不想要的行为。

相关内容