【发布时间】:2022-01-18 13:33:35
【问题描述】:
我有一个 shell 脚本 main.sh,它运行一个 python 脚本 main.py。当我手动运行main.sh 脚本时,执行正常(注意:我正在使用root 用户手动运行它)并且python 脚本按预期工作。但是,当我从 crontab 尝试相同的操作时,它每 30 分钟运行一次 main.sh 脚本,然后 python 脚本没有被执行。(我已经完成了 chmod u+x main.sh em> 使其可执行)
下面给出的 crontab 也是 root 用户的
我的 crontab 文件:
*/30 * * * * /home/opc/python_scripts/main.sh >> /home/opc/cron.log.
我的 main.sh 文件:
#!/bin/bash
output=$(sh /home/opc/python_scripts/url.sh)
echo "$output"
searchstring="url is up, login service is up and oc console is up"
if [[ "$output" == *"$searchstring"* ]] ; then
echo "URL is up"
sudo python3 /home/opc/python_scripts/main.py >> /home/opc/pyfile.log
else
echo "URL is Down"
sudo python3 /home/opc/python_scripts/disable_crr.py
fi
我知道它正在输入第一个 if 条件并且它还在打印“URL is up”语句,我有另一个日志文件记录了这一点。当我手动运行它时,我可以看到即使是 python 脚本也可以正常运行,但是使用 crontab 它会卡在echo "URL is up",之后就没有执行了
我为解决这个问题所做的事情:
-
我已经看到类似问题的解决方案,例如-Calling a python script from shell script cron、Shell Script: Execute a python program from within a shell script,但在所有这些问题中,用户都无法从 shell 脚本手动运行 python 脚本。我可以手动运行它,但如果我使用 cronjob,我就会遇到问题。
-
当我在这些脚本所在的目录中运行 ls -la 时,这些文件的所有权如下:
main.sh root root
main.py opc opc
此外,我在我的 python 脚本顶部添加了#!/usr/bin/env python3,因为我认为这是一个类似问题的解决方案,但没有奏效,只能手动工作,而不是使用 crontab。
如何使用 crontab 运行它?
【问题讨论】:
-
您是否尝试过像这样运行
main.sh:/home/opc/python_scripts/main.sh >> /home/opc/cron.log、withoutcrontab? -
@alexzander 是的,我做到了,我可以手动运行文件,但只有 crontab 给我带来了问题。