我尝试创建一个 systemd 启动脚本,在我的笔记本电脑系统启动 30 分钟后启动 rkhunter 扫描,如下所示:
[Unit]
Description=starts rkhunter and displays any findings with zenity
[Service]
ExecStartPre=/bin/sleep 1800
ExecStart=/usr/local/sbin/rkhunter-check
[Install]
WantedBy=default.target
但这失败并出现超时错误
Job for rkhunter.service failed because a timeout was exceeded.
似乎 ExecStartPre 不能这样工作。
我该如何解决这个问题?
一个完美的解决方案是:
- 开机 30 分钟后首次运行
- 每 48 小时重复一次(以防您从不关闭笔记本电脑)
使用计时器单元来安排您的服务开始时间。计时器单元足够灵活,您可以使用一个计时器单元来安排初始运行(启动后 30 分钟)以及第一次运行后 48 小时的重复。(您甚至可以决定是在它首次启动后 48 小时还是在它完成运行后 48 小时使用它。)
文件
rkhunter.service
:文件
rkhunter.timer
:请注意,您的服务单元中不需要某个
[Install]
部分,因为您不想“启用”它,因为这会在引导序列期间运行它,而您想要的只是在 30 分钟后运行它。您需要启用计时器单元,因此它实际上会在启动时启用并在配置的时间启动服务单元。所以:
如果您之前启用了该服务,您需要明确禁用它,因为它现在只能由您的计时器单元启动:
如果您以前从未启用此服务并且正在从头开始实施此设置,则不需要该命令。
重新启动后,这应该可以按照您描述的要求正常工作。
如果您想在服务中使用长睡眠命令,
ExecStartPre
您需要使用以下命令禁用超时TimeoutStartSec=infinity
:如果您想每 48 小时重复启动一次服务,请按照@filbranden 的建议添加一个计时器