cron.deny和cron.allow
cron中有一个crontab命令来对crontab文件进行相关操作:
-l 查看crontab文件内容 -u 用户名 指定哪个用户的crontab文件 -e 编辑crontab文件 -r 删除crontab文件 crontab filename提交作业文件 1:创建crontab文件 (1)首先确定一个编辑器,对crontab文件进行编辑,一般是vi 设置如下:在$HOME下的.profile中增加如下: EDITOR=vi;exportEDITOR (2)创建一个文件,如test文件(一般是用户名,不是用户名也可以) 如创建的文件内容如下: cat $HOME/test 0,30 * * * * /bin/echo"test">/dev/console (3)crontab test 提交的文件会在/var/spool/cron/目录下一个文件中(这个文件名记为用户,那个用户的crontab记为那个用户) 2:一般情况下,最好不要直接操作/var/spool/cron/目录下的crontab文件,这样可能会因为操作问题,造成 更改crontab文件,而影响原来设置的cron任务 那么怎么办呢,一般我们通过编辑副本来编辑crontab文件 操作如下: (1)crontab -l >filename (2)通过编辑filename文件,增加或删除定时任务 (3)提交filename文件(这样发现/var/spool/cron/目录下一个文件已经改变成提交的那个啦,所以切勿更改错误哦) (4)删除filename文件(或保留这个文件,以便你恢复使用。) 以下是我在使用crontab的一个例子,供大家参考: crontab -l # EDITE DO XXXXX # (/home/test/daemon_crontab_1234 instatll on xxxx) # version xxxxx 0,30 * * * * /home/test/project/bin/test --start >dev/null 2>&1 由于每次执行crontab filename均会在上述文件中(linux系统下,其他不会)增加上述类似的三行注释来表明我修改的时间,版本信息等 故,我如下的程序做了,对于指定的任务,只有这么三行表明我修改的时间和版本信息。故做了如下处理. 以下程序是曾经写过的脚本,现在重新写了下,但未调试,如果有错,稍稍调整以下就没有多大问题了。#!/bin/ksh
main() { username=$1 type=$2 project=$3 #$3项目的home目录 crontab_bak=/home/test/daemon_crontab_$$ crontab_cp=/home/test/daemon_crontab_cp_$$ crontab -l >crontab_bak project_temp=$(echo $project|sed 's/\//\\\//g')#awk -v project_temp=project { gsub(/\//,"\\\/",project_temp) print project_temp}
awk 'BEGIN{ status=0 buff="" } index($0,"'$project'/project/bin/test --start") ==0 { if( status == -1 ){ printf("%s",$0); } else if( status == 0 ){ if( $0 ~ /^# EDITE DO XXXXX/ ) { status =1; buff=sprintf("%s\n",$0); } else { status =-1; buff=sprintf("%s\n",$0); } } else if( status == 1 ){ if( $0 ~ /^# \('$project_temp'\/daemon_crontab_1234 instatll on xxxx\)/ ){ status =2; buff=sprintf("%s%s\n",buff,$0) } else { status =-1; printf("%s%s\n",buff,$0); } }else if( status == 2 ){ if( $0 ~ /^# version xxxxx/ ){ status =0; buff=""; } else { status =-1; printf("%s\n",$0); } } }' $crontab_bak > $crontab_cp } if [ "x$type" = "xadd" ]; then { echo "0,30 * * * * /home/test/project/bin/test --start >/dev/null 2>&1" >>$crontab_cp crontab $crontab_cp } if [ "x$type" = "xdelete" ]; then { crontab $crontab_cp } rm -fr $crontab_cp rm -fr $crontab_bak main $@ 2>/dev/null