cronjob 找不到脚本文件

cronjob 找不到脚本文件

我有一个脚本(buphomebasis.sh),使用 rsync 从我的主目录进行备份。其内容如下:

sudo rsync -avz /home /media/myname/mybackupdsk

它工作得很好,只需从命令行调用该脚本即可。现在我创建了一个 cronjob(backup.sh);其内容是:

SHELL=/bin/bash
45 5 * * * buphomebasis.sh

这应该会在每天凌晨 5 点 45 分进行备份。这两个脚本都在我的home/myname/cronjobs/目录中,但运行时backup.sh会出现以下错误消息:

cronjobs/backup.sh: regel 23: 45: opdracht niet gevonden

或用英语:

cronjobs/backup.sh: line 23: 45: command not found

有人能帮助我解决这个 cronjob 中的错误或缺失吗?

答案1

使用完整路径。Cron 不会继承您的路径,因此您需要使用完整路径才能在 Cron 中正确执行脚本。

因此,您将拥有如下的 cron 条目:

45 5 * * * /home/myname/cronjobs/buphomebasis

答案2

注意:将所有出现的替换$USER为您的实际用户名。

您必须使用完整路径,否则 Cron 任务将无法找到它。您需要输入类似

SHELL=/bin/bash
45 5 * * * /home/$USER/buphomebasis.sh

在您的 crontab 中,以便它运行。您还需要确保脚本是可执行的,因此请确保#!/bin/bash在脚本的开头有。然后,使用 使其可执行chmod +x /home/$USER/buphomebasis.sh

我建议你像这样编写脚本:

#!/bin/bash
rsync -avz /home /media/myname/mybackupdsk >> /home/$USER/backup.log

这样您就可以查看 rsync 是否有任何错误。另外,一定要将其放入 crontab 中root,这样它就可以在没有密码的情况下运行,否则它会失败。您可以使用以下命令编辑 root crontab

sudo crontab -u root -e

答案3

您使用的是sudo crontab -e还是仅crontab -e在进行更改时使用?一个会将其添加到用户的 crontab,另一个会将其添加到 root 的 crontab。

完整路径也不会有什么坏处

相关内容