Cron 执行时部分忽略触发器

Cron 执行时部分忽略触发器

我的 crontab 有问题

我设置

*/5 * * * * /home/money/relaunch.sh

在 crontab -e 中

在 relaunch.sh 中

#!/bin/bash
/usr/bin/pgrep -l -x xyz || /home/money/a.sh && /home/money/xyz.sh

但是,当应用此 crontab 时,它会每 5 分钟启动一次 xyz.sh 的新实例,无论

/usr/bin/pgrep -l -x xyz ||

我怎样才能做到这一点?

答案1

就您而言,您有 2 个连续的条件运算符。

script1 || script2 && script3

关键是要反向思考问题。Script3 在收到的退出代码为 0 时才会运行。让我们分析一下运行 script1 的两种可能结果。

  • 案例 1。脚本 1 成功 - 它产生退出代码 0;脚本 2 从未运行;脚本 3 从脚本 1 接收退出代码 0 并运行。
  • 案例 2。Script1 未成功 - 它产生退出代码 1(或其他非零代码);script2 运行并以代码 0 退出;script2 再次运行。

我不知道您想做什么,但我可以看到两种情况,具体取决于您希望何时运行 script3。

  1. 仅当 script2 成功执行时,您才希望运行 script3。那么您应该使用子壳

     script1 || (script2 && script3)
    
  2. 您希望在 script1 失败时运行 script2,在 script1 成功时运行 script3。那么您只需更改 2 和 3 的位置:

     script1 && script3 || script2
    

相关内容