我编写了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(" "))
此外,我使用此代码将方法打印的所有输出保存到日志文件中:
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工作,所有的帮助将非常感激。
答案 0 :(得分:1)
这是cronjobs 本身的问题,但事实是您的脚本使用相对路径。相对路径是根据"当前工作目录"解决的,当您从主目录手动运行脚本以及它由cron运行时,这是不一样的。显然,解决方案是只在脚本中使用绝对路径。你可以在python脚本本身中对它们进行编码,如果它们不应该改变(这里似乎是这种情况)或者在python脚本中使用os.path.dirname(os.path.abspath(__file__))
来获取脚本的目录路径。