我的 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。
仅当 script2 成功执行时,您才希望运行 script3。那么您应该使用子壳:
script1 || (script2 && script3)
您希望在 script1 失败时运行 script2,在 script1 成功时运行 script3。那么您只需更改 2 和 3 的位置:
script1 && script3 || script2