如何配置systemd任务:仅手动激活后延迟执行,开机时不触发
如何配置systemd任务:仅手动激活后延迟执行,开机时不触发
我来帮你解决这个问题~首先咱们得搞清楚为什么原来的配置会在开机时触发:你给timer加了WantedBy=timers.target,还执行了systemctl enable对吧?这样开机时systemd会自动启动这个timer单元,OnActiveSec=2min就会开始计时,自然开机后2分钟就跑服务了。
下面给你两个靠谱的解决方案,按需选就行:
方案一:最简单直接——不启用开机自启,仅手动启动
这是最推荐的方式,完全贴合你的需求:
- 要么把timer文件里的
[Install]段整个删掉,要么保留但不要执行systemctl enable xxx.timer - 当你需要触发延迟执行时,手动跑这条命令:
systemctl start xxx.timer - 这样一来,开机时这个timer根本不会被激活,只有你手动启动它,才会在2分钟后触发对应的服务,服务跑完后timer也会自动回到 inactive 状态,完美符合你的要求。
方案二:如果必须保留enabled状态,用条件限制开机不启动
要是你因为某些特殊需求,必须让timer处于enabled状态,那可以给timer加个启动条件,让它只有在手动触发时才会激活:
- 修改你的timer文件,在
[Unit]段里加一行条件判断:
ConditionPathExists=/run/manual-trigger-xxx
这里的/run/manual-trigger-xxx是临时文件路径,你可以改成和服务名对应的名字,方便识别。
2. 当你需要手动激活时,先创建这个临时文件,再启动timer:
touch /run/manual-trigger-xxx systemctl start xxx.timer
- 不用担心后续开机误触发,因为
/run是临时文件系统,重启后里面的文件会自动消失,下次要触发再重新创建就行。
对了,你原来设置的Persistent=false是对的,它的作用是避免关机错过触发时间后,开机补执行,这部分不用改~
备注:内容来源于stack exchange,提问作者Adam Jacobs
相关产品推荐
相关产品推荐

