【问题标题】:Python script to backup directory via Cron job通过 Cron 作业备份目录的 Python 脚本
【发布时间】:2014-01-19 22:06:56
【问题描述】:

我正在尝试将下面的代码作为 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

谁能强调我可能做错了什么?提前致谢!

【问题讨论】:

  • 只是为了清除最初的帖子...我可以从 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) 没有任何意义。如果这还不够,您应该将输出放在日志文件中。

标签: python cron crontab nagios


【解决方案1】:

只是我的一些提示 - 我将如何尝试安排整个事情

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 

我认为上述设置应该可以工作。如果没有,请尝试直接运行脚本并告诉我它会引发什么错误。

【讨论】:

  • 这个回答很详细!删除变量并使用 root 的 crontab 确实解决了这个问题。非常感谢您的帮助 ansh0l!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-28
  • 1970-01-01
  • 2015-10-14
  • 2020-02-28
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
相关资源
最近更新 更多