【问题标题】:Tar not working from cronjob焦油不能从 cronjob 工作
【发布时间】:2014-03-26 20:55:05
【问题描述】:

我有一个运行时备份 sql 数据库的 python 脚本。

当我手动破坏它但它不运行 tar 和 rm 命令时它可以完美运行!

在备份之前我当然会运行 mysqldump 命令,然后在我运行它之后。这是处理备份的脚本部分

os.system('tar -cvzf Backup_' + formt + '.tar.gz ' + 'sql_Backup_' + formt + '.sql')
os.system('rm ' + 'sql_Backup_' + formt + '.sql')

在我的 cronjob 中

# Python SQL Backup Script
00 23 * * 07 sudo /usr/bin/python /home/user/scripts/SQLbackup.py

当我从 shell 本身运行它时,它运行良好 sudo python /home/user/scripts/SQLbackup.py

但 cronjob 没有。它只运行脚本并创建 sql 文件,仅此而已。它不压缩它,它也不会在压缩后删除sql文件。

我将此添加到 sudoers 文件中

root ALL=(ALL) NOPASSWD:/bin/tar
sudo ALL=(ALL) NOPASSWD:/bin/tar

还是什么都没有。我把 root 和 sudo 都放了只是为了百分百确定。

请记住:它手动运行完美,但不能完全从 crontab 运行。

【问题讨论】:

  • 结果邮件说?
  • 什么结果邮件? @IgnacioVazquez-Abrams
  • crond 为每个通过 stdout 或 stderr 产生输出的单个 cron 作业发送的那个。
  • @IgnacioVazquez-Abrams 它没有给我发送任何电子邮件。并且 cronjob 不会产生任何输出。它只是运行备份,运行 tar 就这样
  • 这不是你的问题所说的。

标签: python linux shell cron crontab


【解决方案1】:

问题可能是当脚本从 crontab 运行时,$PATH 设置不正确,导致脚本找不到指定的二进制文件。

还要检查脚本是否在正确的目录中执行。

修改脚本以包含tarrm 的完整路径,并测试它是否工作得更好:

os.chdir('/path/to/where/sqlfile/resides')
os.system('/usr/bin/tar -cvzf Backup_' + formt + '.tar.gz ' + 'sql_Backup_' + formt + '.sql')
os.system('/bin/rm ' + 'sql_Backup_' + formt + '.sql')

请注意,tar 通常安装在 /usr/bin 中,但在不同的 unix 风格之间可能会有所不同。

【讨论】:

  • 好的,你可以通过在终端中运行“which tar”来检查“tar”的路径并在脚本中设置该路径吗?
  • 当您更新脚本以获得完整且正确的 tar (/bin/tar) 路径时会发生什么?
  • 它仍然不压缩 .sql 文件
  • 从 cron 运行的命令会不会是其他问题?也许它没有找到 .sql 文件,因为它没有指定完整路径?尝试在 tar 命令前添加“os.chdir('/path/to/sqlfile')”。
  • 太棒了!幸好你让它工作了:) 我会用关于 os.chdir() 的信息更新我的答案。
猜你喜欢
  • 2011-08-29
  • 2011-11-02
  • 1970-01-01
  • 2016-03-15
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多