我有一个脚本(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。
完整路径也不会有什么坏处