我有以下 bash 脚本:
#!/bin/bash
mysqldump -u ******** -p******** --all-databases | gzip > /home/srvlinux01/MySQLBackups/database_$(date +\%Y-\%m-\%d).sql.gz
位于/home/srvlinux01/MySQLBackups/
具有backup.sh
以下权限的
-rwxr--r-- 1 root root 134 feb 27 12:48 backup.sh
我已经设置了一个 cronjob sudo crontab -e
,每天晚上运行它
#Automatic MySQL backup
30 3 * * * sh /home/srvlinux01/MySQLBackups/backup.sh
但我收到以下错误的电子邮件:
sh: 0: Can't open /home/srvlinux01/MySQLBackups/backup.sh
我一直在尝试不同的设置,但无法找出问题所在。我可以手动运行脚本,一切都很顺利,所以我猜我的 cronjob 条目有问题,但真的不明白是什么问题。你能帮我找出原因吗?谢谢!
答案1
你需要给你的 cron 一个PATH
。例如:
SHELL=/bin/sh PATH=/bin:/sbin:/usr/bin:/usr/sbin
对于你的情况,尝试把这个前你的命令。查看社区维基这个问题有关为什么PATH
需要该变量的更多信息。以下是摘录;本质上,这个想法是 cron 不会读取/etc/environment
:
somecommand
常见的“陷阱”是 PATH 环境变量不同。也许您的 cron 脚本使用了 中找到的命令,而您在 中/opt/someApp/bin
添加了该命令?cron 不会读取该文件,因此使用 cron 运行时,从脚本运行会失败,但在终端中运行时可以运行。要解决这个问题,只需在脚本顶部设置您自己的变量即可。PATH
/etc/environment
somecommand
PATH
答案2
chmod +x /home/srvlinux01/MySQLBackups/backup.sh
尝试在命令行上使用完整路径运行脚本:
/home/srvlinux01/MySQLBackups/backup.sh
如果它没有运行 - 则说明出现了问题(路径错误)
确保这是你的 crontab
crontab -e
没有 sudo :
sudo crontab -e
是 root crontab - 并且 root 无法找到您的脚本 ;)
删除 crontab 中的“sh”,只需写入:
30 3 * * * /home/srvlinux01/MySQLBackups/backup.sh
答案3
我发现您的 crontab 文件配置中有一个错误。在下面的配置中,您尝试使用前缀backup.sh
调用与 shell 提示中相同的命令sh
,但这可能在 cron 中不起作用。
#Automatic MySQL backup
30 3 * * * sh /home/srvlinux01/MySQLBackups/backup.sh
解决方案:
- 如果需要,请按照评论中所述更改所有者。
- 使其成为可执行文件。
chmod a+x <文件名>
更新你的 crontab 来反映这一点。(直接调用文件,shell 按照文件内的 shebang 行使用)
#Automatic MySQL backup 30 3 * * * /home/srvlinux01/MySQLBackups/backup.sh
我希望这会有所帮助。
答案4
您忘记了执行路径前的点“。”。
30 3 * * * sh ./home/srvlinux01/MySQLBackups/backup.sh
^