![如何避免 /bin/sh -c /bin/bash 和 /bin/bash 对同一个 shell 脚本运行?](https://linux22.com/image/1003999/%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%20%2Fbin%2Fsh%20-c%20%2Fbin%2Fbash%20%E5%92%8C%20%2Fbin%2Fbash%20%E5%AF%B9%E5%90%8C%E4%B8%80%E4%B8%AA%20shell%20%E8%84%9A%E6%9C%AC%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
我在 crontab 中为用户 uni-01 每 10 分钟运行一次 test.sh 脚本
crontab -l
*/10 * * * * /bin/bash /home/uni-01/test.sh > /home/uni-01/data/_d.log 2>&1
当我使用ps -eF
命令时,test.sh 脚本以 开始/bin/sh -c /bin/bash
,第二个以/bin/bash
命令开始。如何避免运行该/bin/sh -c /bin/bash
命令?
root 6007 946 0 12555 2932 1 09:42 ? 00:00:00 /usr/sbin/CRON -f
uni-01 6011 6007 0 1127 756 0 09:42 ? 00:00:00 /bin/sh -c /bin/bash /home/uni-01/test.sh > /home/uni-01/data/_d.log 2>&1
uni-01 6019 6011 0 3164 3088 1 09:42 ? 00:00:00 /bin/bash /home/uni-01/test.sh
Ubuntu 版本是 16.04.1 LS
答案1
您可以尝试包括舍邦 #!/bin/bash
在 的开始处test.sh
。
这会在脚本内部将 bash 设置为脚本的 shell,而无需在 crontab 行中明确说明。
答案2
正如解释的那样如何更改 cron shell(sh 到 bash)?,你可以将默认 shell 更改为bash
:
SHELL=/bin/bash
这个命令必须放在你的 cron 行之前的任何位置,在你的情况下:
SHELL=/bin/bash
*/10 * * * * /home/uni-01/test.sh > /home/uni-01/data/_d.log 2>&1
不用说,这会影响其后的每个 cron 行,如果需要,您可以用一行将其改回来- 或者只是在 crontab 末尾SHELL=/bin/sh
建立一个部分。bash