![](/img/trans.png)
[英]Shell script invoking python code to be run in a virtualenv from Crontab
[英]Run python script from shell script using crontab
我有一个 shell 脚本main.sh
,它运行一个 python 脚本main.py
。 当我手动运行main.sh
脚本时,执行很好(注意:我使用 root 用户手动运行它)并且 python 脚本按预期工作。 但是,当我从每 30 分钟运行一次 main.sh 脚本的crontab尝试相同的操作时,python 脚本没有被执行。(我已经完成了chmod u+x main.sh以使其可执行)
下面给出的 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"
处,之后没有执行
我为解决这个问题所做的事情:
i have seen solutions of similar questions like- Calling a python script from shell script cron , Shell Script: Execute a python program from within a shell script , but in all of these questions the user was not able to run the python script from the shell手动编写脚本。 我可以手动运行它,但如果我使用cronjob ,那么我遇到了问题。
当我在这些脚本所在的目录中运行 ls -la 时,这些文件的所有权就像:
main.sh root root
main.py opc opc
我还在我的 python 脚本的顶部添加了#!/usr/bin/env python3
,因为我已经将其视为类似问题的解决方案,但没有用,只能手动工作,不能使用 crontab。
我如何使用 crontab 运行它?
您是否尝试删除sudo
?
但是,由于您必须每 30 分钟运行一次,您也可以考虑:
schedule
您尝试使用 sudo 执行脚本,但 cron 无法提示您输入密码。 由于这是 root 的 crontab,因此您不需要使用 sudo。
如果必须在 cron 中使用 sudo,则需要通过 /etc/sudoers 将这些命令指定为无密码。 这些方面的东西应该起作用。
opc ALL=(root) NOPASSWD: /home/opc/python_scripts/main.py
所以我不知道问题是什么,但我解决了。
如何:
之前正如我在问题中提到的那样,我已经分别尝试了上述两个问题。
#!/usr/bin/env bash
dirName=`dirname $0`
baseName=`basename $0`
arg1=$1
arg2=$2
cd ${dirName} && python ./room_wise.py arg1 arg2
我不完全理解问题出在哪里,但是当我同时使用这两种解决方案时,它开始起作用了。 同样正如其他人在这篇文章中提到的那样,如果您使用的是 root 的 crontab,请不要使用 sudo,否则可能会导致授权问题。 这解决了它,如果有人有更好的理解,那么也请添加您的答案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.