1)第一步 select-editor 选择crontab -e 的编辑器,否则,退出不了
今天在服务器上运行crontab -e ,脚本执行不了,就是定时任务没有执行,但是dellog.sh单独运行 是没有问题,不知道原因,从网上找,有的说是用户的事情,有的说是路径的问题,还有的说是没有启动的问题,我看了,路径,我使用了cd ,service crond status,crontab是运行的,那就只有换账号了,我把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列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。
整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。
用逗号(,)隔开的一系列值指定一个列表。譬如,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
上面的例子表示每月1、10、22日的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 : 00至23 : 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