Shell脚本没有通过crontab运行,但手动运行正常

use*_*956 3 bash shell

我有一个脚本,检查是否PPTP VPN正在运行,如果没有它重新连接PPTP VPN,当我手动运行该脚本让它执行罚款,当我设置一个cron作业,没有运行

* * * * * /bin/bash /var/scripts/vpn-check.sh
Run Code Online (Sandbox Code Playgroud)

脚本来了:

#!/bin/sh
/bin/ping -c3 192.168.17.27 > /tmp/pingreport
result=`grep "0 received" /tmp/pingreport`
truncresult="`echo "$result" | sed 's/^\(.................................\).*$$'`"
if [[ $truncresult == "3 packets transmitted, 0 received" ]]; then
/usr/sbin/pppd call home
fi
Run Code Online (Sandbox Code Playgroud)

use*_*956 11

最后我找到了一个解决方案...我需要运行cron而不是

crontab -e
Run Code Online (Sandbox Code Playgroud)

它需要运行

nano /etc/crontab
Run Code Online (Sandbox Code Playgroud)

喜欢的东西

*/5 *     * * *   root  /bin/bash /var/scripts/vpn-check.sh
Run Code Online (Sandbox Code Playgroud)

现在很好!

谢谢大家的帮助......希望我的解决方案能够帮助其他人.

  • 这是一个不精确的答案。根本问题是“crontab”语法有两种不同的变体。对于“root”拥有的系统范围的“crontab”,这个答案是正确的,但您最初拥有的对于用户的私有“crontab”来说是正确的。 (8认同)

Joa*_*eon 6

经过很长时间的错误,我只是这样做了:

SHELL=/bin/bash 
PATH=/bin:/sbin:/usr/bin:/usr/sbin
* * * * * /bin/bash /home/joaovitordeon/Documentos/test.sh
Run Code Online (Sandbox Code Playgroud)

其中test.sh包含:

#!/bin/bash 

/usr/bin/python3  /home/joaovitordeon/Documentos/test.py; 
Run Code Online (Sandbox Code Playgroud)


And*_*zan 5

就我而言,问题在于脚本未标记为可执行文件。要确保它是,请运行以下命令:

chmod +x your_script.sh


Rei*_*ase 2

如果您确定脚本在 cron 之外运行,请执行

printf "SHELL=$SHELL\nPATH=$PATH\n* * * * * /bin/bash /var/scripts/vpn-check.sh\n"
Run Code Online (Sandbox Code Playgroud)

对您正在使用的任何 crontab 执行 crontab -e 并将其替换为上述命令的输出。这应该反映您的大部分环境,以防出现某些丢失路径问题或其他问题。还要检查日志中是否有任何错误。

尽管看起来脚本确实有错误,或者您在将其复制到此处时弄乱了某些内容

sed: -e expression #1, char 44: unterminated `s' command
./bad.sh: 5: ./bad.sh: [[: not found
Run Code Online (Sandbox Code Playgroud)

简单的替代脚本

#!/bin/bash

if [[ $(ping -c3 192.168.17.27) == *"0 received"* ]]; then
  /usr/sbin/pppd call home
fi
Run Code Online (Sandbox Code Playgroud)