Linux工作调度的种类:at,cron
两种工作调度的方式:
一种是例行性的,就是每隔一定的周期要来办的事项(通过at实现);
一种是突发性的,就是这次做完以后就没有的那一种(通过cron实现)。
一、突发性的工作调度(at)
要使用单一工作调度,我们的Linux系统上面由atd来负责这个调度的服务,首先启动/etc/init.d/atd restart
可以设置一下开机时就启动这个服务,免得每次重新启动都得再来一次。 chkconfig atd on
at安全管理
/etc/at.deny
将不可以使用at的帐号写入其中,若未记录到这个文件当中的用户,就可以使用at
at的参数使用
at [-m -v -c -l -d] TIME
-m 当at的工作完成后,即使没有输出信息,以 email通知用户该工作已完成
-l 相当于atq,列出所有用户的at任务
-d 相当于atrm,去掉at的任务
-v 可以用较明显的时间格式列出at调度中的工作
-c 列出后面接的该项工作的实际命令内容
TIME:时间格式,这里可以定义什么时候要进行at这项工作时间,格式有:
HH:MM ex>04:00
HH:MM YYYY-MM-DD ex>04:00 2012-04-01
HH:MM[am|pm] [Month] [Date] ex>04:00 March 17
HH:MM[am|pm] +number [minutes|hours|days|weeks]
ex>now +5 minutes 就是说,在现在在加5minutes后进行该工作调度。
编写例行性工作时应注意:
使用命令时尽量用绝对路径,
用Ctrl+d 结束编写。
at工作的管理
at并不像cron那样,可以用crontab -e来编辑自己的工作调度,
当我们发现命令输入错误,就目前来讲,只能删除它。
(因为at的存放文件并不像crontab,at命令的存放文件为二进制文件[/var/spool/at/,对应的工作调度执行过后,则其二进制文件也就消失了],可用od查看,从简单使用的角度来讲,若命令错了,直接删除(atrm)重建)
atrm 后加工作序列号,删除该工作任务。
二、例行性的工作调度(cron)
cron安全管理
/etc/cron.deny
将不可以使用crontab的帐号写入其中,若未记录到这个文件当中的用户,就可以使用crontab.
crontab的参数使用
-u -e -l -r
-u 只有root才能进行这个任务,也即帮其他用户新建 、删除crontab工作高度;
-e 编辑crontab的工作内容;
-l 查阅crontab的工作内容;
-r 删除所有的crontab的工作内容,若仅要删除一项 ,请用-e去编辑。
范例:用root的身份在每天的12:00发信给自己
crontab -e
#此时进入vi的编辑器界面。
0 12 * * * mail root -s "at 12:00" </root/.bashrc
#分 时 日 月 周 |<-------------命令串------------------>|
默认情况下,任何用户只要不被列入/etc/cron.deny当中,那么他就可以直接执行“crontab -e”去编辑自己的例行性命令了。当用户使用crontab这个命令来新建工作调度之后,该项工作就会被记录到/vart/spool/cron里面去了,而且是以帐号来作为判别的。
crontab命令的特殊字符:
* 代表任何时刻都接受的意思
, 代表分隔时段的意思,举例:要执行工作3:00和6:00时,就是 0 3,6 * * * cdommand
- 代表一段时间范围内,
/n 即是第隔n单位间隔的意思
举例:*/5 * * * * command 即是每隔5分钟执行一次这个命令
可能有时处于停机状态时,crontab命令就不能执行,这时就需要anacron来可唤醒停机期间的工作任务
anacron 以天为单位或者在开机后立刻进行anacron的操作,它会去检测停机期间应该进行但是并没有进行的crontab任务,并将该任务执行一遍,然后anacron就会自动停止了。
由于/etc/cron.daily内的任务比较多,因此我们使用每天进行的任务来解释一下anacron的运行情况好了。anacron若执行“anacron -scron.daily”时,它会这样运行的:
1.由/etc/anacrontab分析到cron.daily这项工作名称的天数为1天;
2.由/var/spool/anacron/cron.daily取出最近一次执行anacron的时间戳;
3.由上个步骤与目前的时间比较,若差异天数为1天以上(含1天),就准备进行命令;
4.若准备进行命令,根据/etc/anacrontab的设置将延迟65分钟;
5.延迟时间过后,开始执行后续命令,即“run-parts /etc/cron.daily"这个命令;
6.执行完毕后,anacron程序结束。
现在你知道为什么隔了一阵子才将linux开机时,开机过后约1小时左右系统会有一小时段的忙碌,而且硬盘会跑个不停!那是因为anacron正在执行过去crontab未执行的各项工作调度。
进程管理:
jobs -l
注:其实+代表最近被放到后台的工作号码,-代表最近最后第二个被放置到后台中的工作号码。而超过最后第三个以后的工作,就不会有+、-符号存在了!
工作状态是stopped,若工作状态为done,说明已经结束了,即便是最近没有+号,当你在执行一次jobs,就已经看不到该工作了。
进程的执行顺序
priority与nice
PRI 值越低代表越优先,这个PRI的值是由内核动态调整的,用户无法直接调整PRI值,
可通过Nice值,
PRI(new)=PRI(old)+nice
nice值可以调整的范围为-20—19;(root)
普通用户调整的范围为0—19
nice 是对即将执行的命令
#用root给一个nice值为-5,用于执行vi,并查看该进程!
[root@www ~]nice -n -5 vi &
renice 是对正在执行的执行
renice [number] PID
[root@www ~]renice 10 18625
kill -signal PID
可以帮我们将这个signal传送给某个工作(%jobnumber)或者是某个PID(直接输入数字。要再次强调的是:kill后面直接加数字与加上%jobnumber的情况是不同的!这个很重要。因为工作控制中有1号工作,但是PID1号则是专指“init”这个进程。你怎么可以将init关闭呢?关闭init,你的系统就死掉了啊!所以记得那个%是专门用在工作控制的。
举例:如下图:用vim在后台运行,用jobs查看,并想通过kill 1来删除该工作号,发现并不能成功,会弹出说是不允许的操作,因为kill 1并不是杀掉1号工作,而是关闭init,即系统的主进程,当然是不允许的了。
应该用kill %1,就能正确关闭1号工作了。
killall -signal 命令名称
由于kill后面必须要加上PID(或者是jobnumer),所以,通常kill都会配合ps,pstre等命令,因为我们必须要找到相对应的那个进程的ID。但是,如此一来,很麻烦,可以直接用killall 其后直接跟命令名称,
killall -1 httpd 可以让PID重新读取自己的配置文件,类似重新启动httpd服务
也可以用 pkill -1 httpd
killall -9 httpd 强制终止所有以httpd启动的进程;
killall -i bash 依次询问每一个bash进程是否需要被终止进行。
总之,要删除某个进程,我们可以使用PID或者启动该进程的命令名称,而如果要删除某个服务呢,最简单的方法就是利用killall,因为它可以将系统当中所有以某个命令名称启动的进程全部删除。
本文转自 刘园 51CTO博客,原文链接:http://blog.51cto.com/colynn/1011482