这是我的 crontab:
42 17 * * 1-5 /bin/pkill -f 'MyExecutable.exe' ; touch /tmp/here.log
并且根据/var/log/cron
它运行:
May 22 17:42:01 server1 CROND[326732]: (myuser) CMD (/bin/pkill -f 'MyExecutable.exe' ; touch /tmp/here.log)
而的过程MyExecutable.exe
确实消亡了。然而,here.log
并不是在中创建的/tmp
。
如果我在 myuser 下手动运行它:
touch /tmp/here.log
文件已成功创建(因此肯定不是权限问题)。我甚至尝试将其移至touch
crontab 中的单独 cronjob,并且成功了。
touch
为什么分号后面不运行?
答案1
这可以通过以下方式复制
sh -c 'pkill -f "MyExecutable.exe" ; touch /tmp/here.log'
Cron 通过将命令传递给 shell(sh
或其他)来运行命令,因此实际上它与上面的行非常相似。无论任何MyExecutable.exe
命令是否运行,pkill -f
都会匹配 shell 并在运行之前将其终止touch
。这是因为
该模式通常仅与进程名称匹配。
-f
设置后,将使用完整命令行。
(来源:man 1 pkill
)
可能的解决方案:
如果你不需要
-f
,就删除它:42 17 * * 1-5 /bin/pkill 'MyExecutable.exe' ; touch /tmp/here.log
如果确实需要
-f
,请touch
在之前运行pkill
:42 17 * * 1-5 touch /tmp/here.log ; /bin/pkill -f 'MyExecutable.exe'