我有一个python脚本,可以在运行时备份sql数据库。
当我手动破坏它但没有运行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都放在100%肯定。
请记住:它手动运行完美,但不能完全从crontab运行。
答案 0 :(得分:0)
问题可能是从crontab运行脚本时未正确设置$PATH
,这导致脚本找不到指定的二进制文件。
同时检查脚本是否在正确的目录中执行。
修改脚本以包含tar
和rm
的完整路径,并测试它是否更有效:
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风格之间可能会有所不同。