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

时间:2014-01-19 22:06:57

标签: 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 = '/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:])

注释部分用于debbuging目的,每当代码运行时,它都显示代码已完成且没有错误:

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 个答案:

答案 0 :(得分:4)

我最后的一些提示 - 我将如何安排整个事情

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

#!/usr/bin/env python

2)将脚本模式更改为755以使脚本可执行

sudo chmod 755 /app/nagios_install/backup/nagios_backup.py

3)从root用户的crontab

安排cron作业
sudo crontab -e

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

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

5)在root用户的crontab

中安排cron作业,如下所示
17 12 * * * /app/nagios_install/backup/nagios_backup.py >> /var/log/nagios_backup.log 2>&1 

我认为以上设置应该有效。如果没有,请尝试直接运行脚本,让我知道它会抛出什么错误。