通过Cron作业将Python脚本备份到备份目录

通过Cron作业将Python脚本备份到备份目录,python,cron,crontab,nagios,Python,Cron,Crontab,Nagios,我试图在没有任何运气的情况下以cronjob的身份运行下面的代码 import sys import time import tarfile def main(argv): #f = open('/tmp/backup-log.txt', 'a') #f.write('variable start\n') timeStamp = time.strftime('%y%m%d') nagiosFolder = '/app/nagios/' fileName

我试图在没有任何运气的情况下以cronjob的身份运行下面的代码

import sys
import time
import tarfile

def main(argv):
    #f = open('/tmp/backup-log.txt', 'a')
    #f.write('variable start\n')
    timeStamp = time.strftime('%y%m%d')
    nagiosFolder = '/app/nagios/'
    fileName = '/app/nagios_install/backup/nagios-backup-%s.tar.gz' % timeStamp
    #f.write('variable end\n')

    try:
        #f.write('tar start\n')
        tarGeza = tarfile.open(fileName, 'w:gz')
        tarGeza.add(nagiosFolder)
        tarGeza.close()
        #f.write('tar end\n')
        #f.close()
        sys.exit(0)
    except tarfile.TarError, tarexc:
        #f.write('exception error')
        #f.close()
        print tarexc
        sys.exit(1)

if __name__ == '__main__':
    main(sys.argv[1:])
注释的部分用于消除错误,每当代码运行时,都会显示代码已完成且没有错误:

variable start
variable end
tar start
tar end
我的crontab设置是:

HOME=/usr/nagios/
LOGNAME=nagios
PATH=/usr/lib64/qt-.3/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/usr/bin/python
SHELL=/usr/bin/python

17 12 * * * /usr/bin/python /app/nagios_install/backup/nagios_backup.py
和权限如下所示:

-rwxrwxr-x 1 nagios root 1009 Jan 17 11:00 /app/nagios_install/backup/nagios_backup.py

谁能强调一下我可能做错了什么?提前谢谢

只是我这边的一些建议-我将如何安排整个事情

1) 在python脚本的顶部包含一行
shebang
,用于提取python可执行文件,并从
cron
条目中删除python可执行文件路径-生产服务器上的可执行文件路径与开发环境中的可执行文件路径总是不同的

#!/usr/bin/env python
2) 将脚本模式更改为
755
,以使脚本可执行

sudo chmod 755 /app/nagios_install/backup/nagios_backup.py
3) 从根用户的
crontab

sudo crontab -e
crontab-e
默认情况下打开当前用户的crontab,而不是root用户的crontab。当前用户可能无法访问
nagios
目录

4) 从crontab中删除
SHELL
变量,首先不需要它。您也没有使用变量
LOGNAME
HOME
,因此也可以删除它们,我认为也不需要它们

5) 在根用户的crontab中安排cron作业,如下所示

17 12 * * * /app/nagios_install/backup/nagios_backup.py >> /var/log/nagios_backup.log 2>&1 

我认为上面的设置应该可以工作。如果没有,请尝试直接运行脚本,并让我知道它抛出了什么错误。

这是我最后的一些技巧-我将如何安排整个过程

1) 在python脚本的顶部包含一行
shebang
,用于提取python可执行文件,并从
cron
条目中删除python可执行文件路径-生产服务器上的可执行文件路径与开发环境中的可执行文件路径总是不同的

#!/usr/bin/env python
2) 将脚本模式更改为
755
,以使脚本可执行

sudo chmod 755 /app/nagios_install/backup/nagios_backup.py
3) 从根用户的
crontab

sudo crontab -e
crontab-e
默认情况下打开当前用户的crontab,而不是root用户的crontab。当前用户可能无法访问
nagios
目录

4) 从crontab中删除
SHELL
变量,首先不需要它。您也没有使用变量
LOGNAME
HOME
,因此也可以删除它们,我认为也不需要它们

5) 在根用户的crontab中安排cron作业,如下所示

17 12 * * * /app/nagios_install/backup/nagios_backup.py >> /var/log/nagios_backup.log 2>&1 

我认为上面的设置应该可以工作。如果没有,请尝试直接运行脚本,并让我知道它抛出了什么错误。

只需清除初始post…我可以从CLI运行代码,但是当通过crontab计划时,似乎什么也没有发生。您应该将cronjob的输出重定向到日志文件以捕获错误消息,例如
17 12***/usr/bin/python/app/nagios_安装/backup/nagios_backup.py>/var/log/nagios_backup.log 2>&1
对于初学者来说,您肯定不希望crontab的
SHELL
/usr/bin/python
,因为您的命令对python SHELL没有任何意义(
/usr/bin/python/app/nagios\u install/backup/nagios\u backup.py
)。如果这还不够,您应该将输出放在日志文件中。只需清除初始post…我可以从CLI运行代码,但是当通过crontab计划时,似乎什么都没有发生。您应该将cronjob的输出重定向到日志文件以捕获错误消息,例如
17 12***/usr/bin/python/app/nagios_install/backup/nagios_backup.py>/var/log/nagios_backup.log 2>&1
对于初学者,您当然不希望crontab的
SHELL
/usr/bin/python
,因为您的命令对python SHELL没有任何意义(
/usr/bin/python/app/nagios_install/backup/nagios_backup.py
)。如果这还不够,您应该将输出放在日志文件中。这是一个非常详细的答案!删除变量并使用root的crontab确实解决了问题。非常感谢您的帮助ansh0l!这是一个非常详细的答案!删除变量并使用root的crontab确实解决了问题。非常感谢您的帮助p ansh0l!