linux crontab

来源:互联网 发布:封面制作软件ios 编辑:程序博客网 时间:2024/06/09 14:59

1)第一步 select-editor  选择crontab -e 的编辑器,否则,退出不了


今天在服务器上运行crontab -e ,脚本执行不了,就是定时任务没有执行,但是dellog.sh单独运行 是没有问题,不知道原因,从网上找,有的说是用户的事情,有的说是路径的问题,还有的说是没有启动的问题,我看了,路径,我使用了cd ,service crond statuscrontab是运行的,那就只有换账号了,我把wz的定时任务删除了,切换到root账号,crontab -e重新设置了定时任务,但是还是不行,使用root账号也能运行dellog.sh脚本,后来,我使用root重建了dellog.sh脚本,使用/etc/init.d/crond restart ,执行了,但是发现部分文件没有被删除,在日志中也没有见到这些文件的记录,后来再次运行,可以了,于是设置2个任务进行删除。

 

 第一种是脚本执行了,但是报错:在crontab里调度运行,结果发现没有结果,查看/var/log/message日志,发现crontab有执行,但是失败。

手动运行都是可以的,放在crontab里边发现就不能运行了。

处理方法:脚本中不要采用相对路径,全部改为绝对路径

 

第二种是编辑/var/spool/cron/user   user为执行用户名,一般为root

如更改后不起效果,请重新加载cron

处理方法: /etc/init.d/cron reload

/etc/init.d/crond restart

 第三种 crontab -e  进行编辑

use the following command add entries to crontab should take effect right away.

#crontab -e

 

如还不行就从其服务:

处理方法:/etc/init.d/crond restart   

service crond status

service crond stop

service crond start

 

ubuntu 安装定时任务

sudo apt-get install cron

service cron start

service cron start

 

原因是普通的linux/etc/init.d/crond

ubuntu下是/etc/init.d/cron

 

Crontab 执行日志 /var/log/cron

crontab任务配置基本格式:

*   ****command

分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天)  命令

 

1列表示分钟159每分钟用*或者*/1表示

2列表示小时1230表示0点)

3列表示日期131

4列表示月份112

5列标识号星期060表示星期天)

6列要运行的命令

 

在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。

整数间的短线(-)指定一个整数范围。譬如,1-4意味着整数 1234

用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8标明这四个指定的整数。

正斜线(/)可以用来指定间隔频率。在范围后加上/<integer> 意味着在范围内可以跳过integer。譬如,0-59/2可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3的值可以用在月份字段中表示每三个月运行一次任务。

开头为井号(#)的行是注释,不会被处理。

 

例子:

0 1 * * * /home/testuser/test.sh

每天晚上1点调用/home/testuser/test.sh

*/10 * * * * /home/testuser/test.sh

10钟调用一次/home/testuser/test.sh

30 21 * * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每晚的21:30重启apache

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每月11022日的4 : 45重启apache

 

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每周六、周日的1 : 10重启apache

 

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart

上面的例子表示在每天18 : 0023 : 00之间每隔30分钟重启apache

 

0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart

上面的例子表示每星期六的11 : 00 pm重启apache

 

* */1 * * * /usr/local/etc/rc.d/lighttpd restart

每一小时重启apache

 

* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart

晚上11点到早上7点之间,每隔一小时重启apache

 

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart

每月的4号与每周一到周三的11点重启apache

 

0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart

一月一号的4点重启apache

*/30 * * * * /usr/sbin/ntpdate 210.72.145.44

每半小时同步一下时间


真实例子 删除7天前的日志

#!/bin/bash
echo "bbb" >> /home/wz/logdel/aa.txt
cd /home/wz/pims/pi-web-1.0.0/log/archive
pre7day=`date +"%Y%m%d" -d "-5 days"`
#file=$(ls arche | awk -F ' '  '{print $1}')
file=$(ls  | awk -F ' '  '{print $1}')
for i in $file
do
        echo $i >> /home/wz/logdel/aa.txt
        var1=`echo $i | awk -F '.' '{print $1}'`
        echo $var1 >> /home/wz/logdel/aa.txt
        var2=`echo $var1 | awk -F '_' '{print $2}'`
        echo $var2 >> /home/wz/logdel/aa.txt
        delday=`date -d $var2 +%s`
        standday=`date -d $pre7day +%s`
        if [ $delday -lt $standday ];then
                echo "$var2 < $pre7day"
                echo "delete $i" >> /home/wz/logdel/aa.txt
                rm $i
        else
                echo "$var2 >= $pre7day" >> /home/wz/logdel/aa.txt
        fi
done




原创粉丝点击