2014-07-08 27 views
0

我有一个crontab的问题,它不执行我的shell sript。crontab将不会执行脚本

的crontab -l:

01 * * * * login sh ~/delete.sh 

一般每分钟就应该执行delete.sh,但事实并非如此。

没有在系统日志:

Jul 8 14:00:31 crontab[22307]: (login) LIST (login) 
Jul 8 14:01:08 crontab[22581]: (login) BEGIN EDIT (login) 
Jul 8 14:01:51 crontab[22581]: (login) REPLACE (login) 
Jul 8 14:01:51 crontab[22581]: (login) END EDIT (login) 
Jul 8 14:02:01 cron[15185]: (login) RELOAD (crontabs/login) 
--> THAT'S ALL. 

PS:我已经尝试运行它为根,作为普通用户,在这两种情况下没有运气。

+0

哪个linux版本? – Stedy

+0

ubuntu-14.04-server-i386 – NebuK

+0

尝试用'/ bin/sh'替换'sh',crontab不一定具有所有需要的路径。 – favoretti

回答

4

你期待这样的:

01 * * * * login sh ~/delete.sh 

运行该命令的每一分钟。事实上,它只在每小时过去一分钟运行。

它改成这样:

* * * * * login sh ~/delete.sh 

为了解决在评论中提出的问题:

Cron作业用有限$PATH运行,但/bin肯定会在$PATH,所以没有必要用/bin/sh代替sh

不需要明确调用sh。只要确保~/delete.sh有一个合适的shebang#!/bin/sh#!/bin/bash)并且它是可执行的(chmod +x ~/delete.sh),并且您可以直接调用它。

我不知道你为什么有一个login命令。尝试从cron作业登录是没有意义的。在任何情况下,login都不会将命令作为参数。

如果login是用户名而不是命令,请记住crontab条目有两种不同的语法。在正常语法中,每行包含5个字段,指定作业运行的时间,后跟命令及其参数。 A 系统 crontab条目在时间规范和命令之间添加一个用户帐户名称。 man 5 crontab了解详情。在正常使用情况下,您应该使用普通用户语法并使用crontab命令管理您的crontab;除非您绝对必须,否则请勿编辑/etc/crontab/etc/cron.*以下的文件。