rub*_*o77 1 sleep systemd rkhunter
我尝试创建一个 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
Run Code Online (Sandbox Code Playgroud)
但这失败并出现超时错误
Job for rkhunter.service failed because a timeout was exceeded.
Run Code Online (Sandbox Code Playgroud)
ExecStartPre 似乎不是这样工作的。
我该如何解决这个问题?
一个完美的解决方案是:
使用计时器单元来安排您的服务开始时间。计时器单元足够灵活,您可以使用一个计时器来安排启动后 30 分钟的初始运行以及第一次运行后 48 小时的重复运行。(您甚至可以决定是在首次启动后 48 小时还是在完成运行后 48 小时使用它。)
文件rkhunter.service
:
[Unit]
Description=rkhunter check with zenity findings
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/rkhunter-check
Run Code Online (Sandbox Code Playgroud)
文件rkhunter.timer
:
[Unit]
Description=timer for rkhunter check
[Timer]
OnBootSec=30min
OnUnitActiveSec=48h
[Install]
WantedBy=timers.target
Run Code Online (Sandbox Code Playgroud)
请注意,您[Install]
的服务单元中不需要某个部分,因为您不想“启用”它,因为这会在引导序列期间运行它,而您想要的是仅在 30 分钟后运行它。
您需要启用计时器单元,以便它在启动时实际启用并在配置的时间启动服务单元。所以:
systemctl daemon-reload
systemctl enable rkhunter.timer
Run Code Online (Sandbox Code Playgroud)
如果您之前启用了该服务,您将需要明确禁用它,因为它现在应该只能由您的计时器单元启动:
systemctl disable rkhunter.service
Run Code Online (Sandbox Code Playgroud)
如果您之前从未启用过此服务并且是从头开始实施此设置,则不需要该命令。
重新启动后,这应该可以按照您描述的要求正常工作。