标签:
一、控制前后台作业
jobs:列出当前环境的后台或暂停的作业
fg、bg、kill:控制指定的作业,作业用“%+作业号”来指定
nohup:运行一个即便账号logout都不会被kill,而是被init进程接管的作业
二、at命令——预指定单独一次的作业执行
#at [ -c | -k | -s -q Quene] [ -m ] [ -f File ] { -t Date | Time [ Day ] [ increment ] }
1)三种运行at命令的格式
a)#at Time
command1
command2
... ...
ctrl+d(结束命令输入)
#
b)#echo command| at Time(通过管道符把命令告诉给at)
c)#at -f File Time(指定Time时刻执行文件File中的命令)
2)at中可是识别的Time的时间格式
a)Date参数的格式——[ [ CC ] YY ] MMDDhhmm [ .SS ]
CC:世纪;YY:年份的后两个数字;MM:一年的月份(01~12);DD:一月中的天(01~31);hh:一天中的小时(00~23);mm:一小时中的分钟(00~59);.SS:一分钟的秒(00~59)
CC和YY是可选的,若YY给定而CC没有给定,那么有如下规则:(1)、99>=YY>=70,则CC=19;37>=YY>=00,则CC=20。
SS默认是00
b)Time [ Day ] [ increment ]格式
Time参数为一个数字跟一个后缀,如果Time是两位数的数字,那么at会把它当成小时,四位数的则会当成小时和分钟,若四位数用冒号(:)分开,则意思为hh:mm。后缀可以是am、pm、zulu,zulu是格林威治时间。
Time也有一些特殊的参数形式如下:noon、midnight、now、A(表示AM)、P(表示PM)、N(表示noon)、M(表示midnight)
Time后边可选跟一个Day参数:用来表示一个月份名字和日数字(可以在逗号之前带一个年),或者表示为一个星期的某一天。默认是月份之后是日,如果Day是2或多个字符,则表示为星期的某一天,例如Sunday;如果是3个字符一般表示是月份,例如Jun。如果没有给出日期,那么Day默认把今天或明天当成一个默认参数值(Time时间没过Day就只今天,如果时间过了,就是明天)。
参数increment用来改变时间和日期的参数,可是是一个加号(+)跟一个数字和单位。格式为“+n Units”,其中Units可以是 minute[s]、hour[s]、day[s]、week[s]、mouth[s]、year[s]等
以下均为正确的表示形式:
#at 0820 ---->每天上午8点20执行作业
#at 0820 am ---->每天上午8点20执行作业
#at 08:20 am July 26 ---->在7月26日上午8点20执行作业
#at 7 pm Monday ---->星期一下午7点执行作业
#at now next week ---->下个星期的这个时候执行作业
#at now +38 days ---->在38天后的这个时候执行作业
#at noon tomorrow ---->在明天中午执行作业
#at 3:00 pm Friday next week ---->在下个星期五的下午3点执行作业
最后一行是at返回的作业号和执行时间日期。作业号由三部分组成:root.996455160.a——<用户名>.<作业标识>.<作业类型>,作业好由系统按顺序分配,与进程ID无关。
c)显示/删除at作业
#at -l [ -o ] [ Job | -q Queue ]
#at -n [ User ]
#at -r [ -F ] [ -i ] Job
#at -r [ -F ] [ -i ] -u User
3)控制用户使用at命令
由/var/adm/cron/at.allow和/var/adm/cron/at/deny这两个文件共同控制哪些用户可以使用at命令和batch命令哪些用户不可以,只有root用户可以创建和编辑这些文件。
如果/var/adm/cron/at.allow文件存在,则只有出现在这个文件中的用户才有权利执行at命令,如果/var/adm/cron/at/deny文件存在,那么凡是没有出现在这个中的用户都有权利执行at命令
一下任何一种情况,用户都不能使用at命令:
a)allow和deny文件都不存在
b)allow文件为空
c)deny文件存在,但是用户名记录其中
三、batch命令
使用at命令,那么at作业到了指定的执行之间,会不顾当时的系统负载,直接开始执行作业,如果预先要执行的作业占用大量的系统时间,那么不妨使用batch命令。batch命令从标准输入读入命令,向系统提交一批作业,然后系统把作业放在一个队列,视系统负载情况找机会开始执行。单纯的batch命令等同于at -b -m now。
如果batch或at -b 命令不带Time,那么作业立即在队列中排队并且一旦系统负载允许就开始执行,如果带上Time参数,则在该时间之后,系统负载允许时运行作业。
四、cron——周期性自动执行作业
1)cron进程
cron后台服务进程由init进程启动。它是一个Daemon进程,在系统启动时,只需要启动一次,启动后,会检查crontab文件,当用crontab工具修改了这个文件以后,就会向crontab进程发送一个crontab文件已改变的消息,然后cron进程就会重新读取crontab文件
cron进程按照crontab文件中的记录内容执行命令,除非重定向了cron作业的标准输入和错误输出,cron进程会将标准输出和错误输出以邮件的形式发送给登录用户。如果在crontab文件中指定了一个错误的记录,那么cron进程不会执行那个作业。可以用crontab -e来编辑crontab文件
2)crontab文件
a)crontab文件记录着由cron进程在指定日期,时间执行的命令信息,cron机制将为每一位用户建立一个crontab文件,并且以用户名作为crontab文件的文件名,这些crontab文件位于/var/spool/cron/crontabs/目录下。
b)crontab文件记录的格式
minute hour day_month month weekday command
其中:
minute:00~59
hour:00~23
day_month:1~31
month:1~12
weekday:0~6,0为星期天
command:shell命令
特殊说明:
(1):两个数字用“-”连接,表示数字之内的所有值,eg:“3-6”表示3、4、5、6
(2):一个单独数字,表示范围,eg:month字段写7,表示在7月份
(3):逗号分开的数字清单,表示每个数字指定的值的集合,eg:“3,6”表示3、6
(4):一个*,表示所有的合法值
(5):日期中的天可以用两个字段来确定,分别是Day_month和Weekday,如果两个字段都有指定数字,则表示当日期符合这两个字段中的任意一个指定的日期,命令都执行。
(6):command可以是单个命令,也可以是一个多个命令组成的shell脚本。如果该字符串包含了“%”(除非使用反斜杠“\”,即“\%”),则cron进程认为%之前的是所有字符是命令,%后边的所有字符作为命令的标准输入部分。
(7):在crontab文件中不能出现空白行,否则cron进程会出错,在该文件中,凡是出现#的行都是注释行。
(8):/var/adm/cron/cron.allow和/var/adm/cron/cron.deny这两个文件的控制作用对cron进程来说也适用。具体作用方式可以参考at命令下的两个控制文件的说明。
c)cron日志
cron进程在/var/adm/cron/log文件中记录它所有的活动。通过查询该日志可以帮助用户跟踪解决令人费解的,与调试作业有关的问题。
cron运行作业时会在/tmp目录中创建一些临时的文件,这些临时文件是以“crout”字符串开头的,当作业完成以后,这些文件就会被自动删除,如果这些文件仍然存在,则说明cron进程没有成功地运行这个作业,作业可能出现了问题。
标签:
原文地址:http://www.cnblogs.com/lqdflying/p/4840649.html