首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有由cron运行的bash脚本

没有由cron运行的bash脚本
EN

Unix & Linux用户
提问于 2014-07-25 08:39:29
回答 1查看 7.7K关注 0票数 1

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

代码语言:javascript
复制
./removeOldBackup.sh

代码语言:javascript
复制
sh /home/myusername/backup/removeOldBackup.sh

但是当我将它添加到crontab中时,如

代码语言:javascript
复制
* * * * * sh /home/myusername/backup/removeOldBackup.sh

代码语言:javascript
复制
* * * * * /bin/sh /home/myusername/backup/removeOldBackup.sh

从来都不管用..。

这是我的剧本:

代码语言:javascript
复制
#!/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

这是我的脚本权限:

代码语言:javascript
复制
-rwxr-xr-x 1 root root 295 Jul 25 10:07 /home/myusername/backup/removeOldBackup.sh

Crontab是为用户根添加的。

这就是我在/var/log/syslog中发现的:

代码语言:javascript
复制
Jul 25 10:11:01 myservername /USR/SBIN/CRON[7583]: (root) CMD (sh /home/myusername/backup/removeOldBackup.sh)

因此,当我手动运行脚本时,备份文件将被正确删除。当它由cron运行时,它们永远不会被移除。我用的是Debian6.0-x86_64。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2014-07-25 08:58:08

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

尽管如此,似乎根本不需要将这个cronjob作为根用户运行:所有的文件都在myusername的S主目录中,而且大概也是属于它们的。为什么不将您的cronjob放在用户的crontab中呢?以myusername的形式运行crontab -e,并添加与root版本完全相同的行。这样,您就没有必要以特权用户的身份运行一个任务(它会自动删除文件,同样也会删除文件),您也将处于脚本开始的工作位置。

票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/146502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档