Bash 脚本未从 crontab 执行

Bash 脚本未从 crontab 执行

我有以下 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/environmentsomecommandPATH

答案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
解决方案:
  1. 如果需要,请按照评论中所述更改所有者。
  2. 使其成为可执行文件。
    chmod a+x <文件名>
  3. 更新你的 crontab 来反映这一点。(直接调用文件,shell 按照文件内的 shebang 行使用)

    #Automatic MySQL backup
    30 3 * * * /home/srvlinux01/MySQLBackups/backup.sh
    

我希望这会有所帮助。

答案4

您忘记了执行路径前的点“。”。

30 3 * * * sh ./home/srvlinux01/MySQLBackups/backup.sh             
              ^

相关内容