Python脚本在cron作业中不执行bash命令

时间:2017-12-06 10:48:16

标签: python linux bash shell cron

我编写了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工作,所有的帮助将非常感激。

1 个答案:

答案 0 :(得分:1)

这是cronjobs 本身的问题,但事实是您的脚本使用相对路径。相对路径是根据"当前工作目录"解决的,当您从主目录手动运行脚本以及它由cron运行时,这是不一样的。显然,解决方案是只在脚本中使用绝对路径。你可以在python脚本本身中对它们进行编码,如果它们不应该改变(这里似乎是这种情况)或者在python脚本中使用os.path.dirname(os.path.abspath(__file__))来获取脚本的目录路径。