【发布时间】:2018-05-20 05:23:46
【问题描述】:
我已经编写了 Python 脚本,我想每天在我的服务器(Cent OS)上执行它。我需要直接从我的 Python 脚本执行一些 bash 命令。当我直接从终端运行脚本时一切正常,但是当 cron 作业执行脚本时不会执行 bash 命令,尽管脚本的其余部分是作业(插入数据库等)。
我的 crontab 如下所示:
00 20 * * 1-5 /home/skanydok/script.sh
script.sh 包含
#!/bin/bash
python /home/skanydok/serverBarcodeScanner.py
我有几种方法用于从服务器移动、复制或删除文件,示例方法如下所示:
def copyBackup():
cmd = "cp -r SKANY_DOKUMENTOW_" + str(now)[:10] + '_' + str(random) + " ./backupy"
call(cmd.split(" "))
我还使用此代码将方法 print 的所有输出保存到日志文件:
class Logger(object):
def __init__(self):
self.terminal = sys.stdout
self.log = open("./backupy/log.txt", "a")
def write(self, message):
self.terminal.write(message)
self.log.write(message)
sys.stdout = Logger()
未创建 log.txt 文件,所有应该执行命令(如 cp、mv、rm 等)的方法都不起作用,尽管在服务器上执行脚本时它们可以正常工作:
python /home/skanydok/serverBarcodeScanner.py
我认为 cron 作业肯定有问题,非常感谢所有帮助。
【问题讨论】:
-
你试过使用
python的绝对路径吗?例如/usr/bin/python /home/skanydok ... -
如上面提到的@Farhan.K,尝试使用
python的绝对路径或加载用户的bash 配置文件而不是#!/bin/bash,如. ~/.bash_profile。另外,当我们在脚本中引用路径时不要忘记使用绝对路径,或者确保在内部使用cd和pwd检查以确保脚本在所需的路径中运行。
标签: python linux bash shell cron