Cron Job 未在 Ubuntu 12.04 中运行

Cron Job 未在 Ubuntu 12.04 中运行

我在 Ubuntu 12.04 的控制台中创建了一个 cron 作业,使用以下命令crontab -e

10 09 * * * /home/ram-pc/Desktop/bala/personal/dump.sh

但它没有运行。当我保存时,它安装正确且没有错误,然后当我使用它查看它时,crontab -l它显示了我的 crontab,但它没有及时运行。

我的dump.sh包含备份数据库命令,如果我尝试单独运行,该.sh文件即可正确运行。

谁能告诉我问题出在哪里?

代码内容dump.sh为:

cd
cd Desktop/bala/personal
mkdir $(date +%Y%m%d)
cd $(date +%Y%m%d)
mysqldump -u root -p*** --all-databases |gzip -9  >database-$(date +%Y%m%d).sql.gz

答案1

这是你的 cron 作业,它看起来很好:

10 09 * * * /home/ram-pc/Desktop/bala/personal/dump.sh

设置为每天上午 9:10 触发。但查看您的脚本时发现问题:

cd
cd Desktop/bala/personal
mkdir $(date +%Y%m%d)
cd $(date +%Y%m%d)
mysqldump -u root -p*** --all-databases |gzip -9 >database-$(date +%Y%m%d).sql.gz

当 cron 任务运行时,它不会以你(用户)的身份运行,因此不会加载二进制文件的路径。因此脚本不知道它在哪里mysqldump。因此你应该运行which弄清楚完整路径是这样的:

which mysqldump

输出应该是这样的;这里使用一个通用的例子:

/usr/local/bin/mysqldump

此外,您还应在文件的第一行添加脚本名称,以便 shell 知道应在哪个环境中运行它。此外,cd后面的 和cd Desktop/bala/personal可以简化为cd ~/Desktop/bala/personal。因此,整个新脚本将如下所示:

#!/usr/bin/env bash
cd ~/Desktop/bala/personal
mkdir $(date +%Y%m%d)
cd $(date +%Y%m%d)
/usr/local/bin/mysqldump -u root -p*** --all-databases |gzip -9 >database-$(date +%Y%m%d).sql.gz

尝试自己从命令行运行该程序,看看它是否有效。如果有效,请再次从 cron 运行它。

答案2

按照如下方式设置 cron 作业,以便您在执行脚本时捕获错误以及您的用户名,例如:charm_quark

  10 09 * * * charm_quark /home/ram-pc/Desktop/bala/personal/dump.sh >>  /home/ram-pc/Desktop/bala/personal/cron.log

还要检查您的权限和环境

在使用自定义脚本之前,请确保它是可执行的,并使用 cron 设置的有限环境变量集对其进行测试。要复制用于运行上述 cron 条目的环境,请使用:

env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/dru LOGNAME=dru /usr/home/dru/bin/mycustomscript.sh

参考:第 12 章 配置和调优

故障排除步骤

  1. 清空 dump.sh 文件,并用一些 echo 替换

    #!/usr/bin/env bash echo "this is a test" >> /home/ram-pc/Desktop/bala/personal/test.log

  2. 检查.sh文件的权限并进行更改。

    chmod 777 /home/ram-pc/Desktop/bala/personal/dump.sh

  3. 请更新 crontab 至

    * * * * * charm_quark /home/ram-pc/Desktop/bala/personal/dump.sh >> /home/ram-pc/Desktop/bala/personal/cron.log

相关内容