bash 脚本没有被 cron 运行

bash 脚本没有被 cron 运行

我有一个非常简单的 bash 脚本,当我这样做时它可以完美地运行

./removeOldBackup.sh

或者

sh /home/myusername/backup/removeOldBackup.sh

但是当我将它添加到 crontab 时

* * * * * sh /home/myusername/backup/removeOldBackup.sh

或者

* * * * * /bin/sh /home/myusername/backup/removeOldBackup.sh

它永远不起作用...

这是我的脚本:

#!/bin/sh

find . -name 'files_20[1-3][0-9]-[0-9][0-9]-[1-2][1-9]--*' -delete
find . -name 'files_20[1-3][0-9]-[0-9][0-9]-0[2-9]--*' -delete

find . -name 'database_20[1-3][0-9]-[0-9][0-9]-[1-2][1-9]--*' -delete
find . -name 'database_20[1-3][0-9]-[0-9][0-9]-0[2-9]--*' -delete

这是我的脚本权限:

-rwxr-xr-x 1 root root 295 Jul 25 10:07 /home/myusername/backup/removeOldBackup.sh

为 root 用户添加了 crontab。

这是我在以下内容中找到的/var/log/syslog

Jul 25 10:11:01 myservername /USR/SBIN/CRON[7583]: (root) CMD (sh /home/myusername/backup/removeOldBackup.sh)

因此,当我手动运行脚本时,我的备份文件会被正确删除。当它由 cron 运行时,它们永远不会被删除。我正在使用 debian-6.0-x86_64。

答案1

为了形式化和扩展某人在评论中所说的内容,当您将某些内容放入 root 的 crontab 中时,它将在内部运行/root,而不是在脚本所在的目录中运行,因为cron甚至不知道它在哪里。由于您的备份文件不在该目录树中,因此该find命令永远不会到达它们。所以作业正在运行,它只是找不到任何要删除的文件。提供绝对路径find或首先添加cd /home/myusername/backup将解决您的问题。

尽管如此,似乎根本不需要以 root 身份运行这个 cronjob:所有文件都在myusername的主目录中,并且可能也归他们所有。为什么不把你的 cronjob 放在该用户的 crontab 中呢?运行crontab -emyusername并添加与 root 版本使用的完全相同的行。这样,您就不必以特权用户身份运行任务(同样会自动删除文件),并且您也将位于脚本启动的工作位置。

相关内容