crontab 上的作业无法运行(作业涉及 VPN)

crontab 上的作业无法运行(作业涉及 VPN)

我是 Linux 新手,所以请原谅我的无知。

我正在尝试让 afile.sh在 crontab 中运行,以便它每天在同一时间运行。当我在终端上运行脚本时,它运行良好。但它在 crontab 中不起作用。该文件如下所示:

echo 'password' | snx
python3 /home/absolute/path/to/script.py
snx -d

第一行连接到 VPN。第二行运行 Python 脚本(通过请求获取数据,然后将数据上传到数据库)。第三行断开与 VPN 的连接。

正如我所说,它在终端上运行时工作正常。但是当我运行crontab -e并添加作业时:

* * * * * /home/absolute/path/to/file.sh

我知道它运行不正常(因为数据没有上传到数据库,所以 python 脚本肯定没有做它应该做的事情)。

我已经尝试过了

  • file.sh通过chmod
  • 我检查了 cron 作业确实正在运行:为了验证这一点,我添加了几行将file.sh消息附加到文件debug.txt。这些消息出现在 中debug.txt,所以我知道它file.sh已由 cron 运行。
  • 我检查了一下,这不是环境变量的问题。我把两个都导出PATHSHELLcrontab 和file.sh。还是不行。
  • #!/bin/sh在文件开头添加 shebang (和其他)。
  • snx使用绝对路径调用。

我认为这可能与 SNX 无法在 crontab 上运行有关。此问题指出了这种可能性:

https://stackoverflow.com/questions/54221762/automate-snx-restart-with-crontab

但我不确定如何使用这些信息(再次强调,我是 Linux 新手)。我尝试了那里提出的确切解决方案(即我在文件顶部添加了这些行),但仍然不起作用。

我还能尝试什么来让脚本在 cron 上运行?还有其他方法可以安排脚本定期运行吗?我觉得 cron 的行为与终端如此不同,这很奇怪。

答案1

将您的脚本更改为:

#!/bin/sh
echo 'password' | snx
python3 /home/absolute/path/to/script.py
snx -d

Linux 需要“shebang”来了解如何执行您的脚本。否则,内核就没有(万无一失的)方法知道您正在编写 Shell、Python、Perl 还是一系列其他语言。

相关内容