shell学习系列(二).crontab,at,nohup
设置crontab文件,并用它来提交作业
使用at命令来提交作业
在后台提交作业
使用nohup命令提交作业
名词解释:
cron:系统调用进程,可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段
at:at命令.使用它在一个特定的时间运行一些特殊的作业,或在晚一些的非负荷高峰时间段或高峰负
&:使用它在后台运行一个占用时间不长的进程.
nohup:使用它在后台运行一个命令,即使在用户退出时也不受影响.
1.1 crontab的域
为了能够在特定的时间运行作业,需要了解crontab文件每个条目中各个域的意义和格式:
第1列: 分钟 1-59
第2列: 小时 1-23
第3列: 日 1-31
第4列: 月 1-12
第5列: 星期 0-6 (0表示星期天)
第6列: 要运行的命令
下面是crontab的格式:
分<>时<>日<>月<>星期<>要运行的命令
crontab文件的一个条目是从左边读起的,第一列是分,最后一列是要运行的命令,它位于星期的后
在这些域中,可以用横杠-来表示一个时间范围,例如希望星期一至星期五运行某个作业,那么可以
1.2 crontab条目举例
30 21 * * * /apps/bin/cleanup.sh
表示每天晚上21:30运行/apps/bin/cleanup.sh这个文件
45 4 1,10,22 * * /apps/bin/backup.sh
表示每月1,10,22日的4:45分运行/apps/bin/backup.sh这个文件
10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;
表示每周六,日的1:10运行一个find命令并删除core文件.
0,30 18-23 * * * /apps/bin/dbcheck.sh
表示每天18:00至23:00之间每隔30分钟运行/apps/bin/dbcheck.sh这个文件
0 23 * * 6 /apps/bin/qtrend.sh
表示每周六的23:00运行/apps/bin/qtrend.sh这个文件
1.3 crontab命令选项
crontab命令的一般形式为:
crontab [-u user] -e -l -r
-u 用户名
-e 编辑crontab文件
-l 列出crontab文件中的内容
-r 删除crontab文件
如果使用自己的名字登录,就不用使用-u选项,因为在执行crontab命令时,该命令能够知道当前用
1.4 创建一个新的crontab文件
在考虑向cron进程提交一个crontab文件之前,首先要做的一件事情就是设置环境变量
创建一个davecron文件,在该文件中加入如下的内容
0,15,30,45 18-06 * * * /bin/echo `date` >> /root/tanjun
保存并退出.然后再运行
crontab davecron
现在该文件已经提交给cron进程,它将每隔15分钟运行一次.
同时,新创建文件一个副本已经被放在/var/spool/cron/目录中,文件名就是用户名.
1.5 列出crontab文件
为了列出crontab文件,可以用:
crontab -l
1.6 编辑crontab文件
如果希望添加,删除或编辑crontab文件中的条目,而EDITOR环境变量又设置为vi,那么就可以使用
crontab -e
可以像使用vi编辑其它任何文件那样修改crontab文件并退出.
1.7 删除crontab文件
crontab -r
2.at命令
at命令允许用户向cron守护进程提交作业,使其在稍后的时间运行.一旦一个作业被提交,at命令
和crontab一样,根用户可以通过/etc/目录下的at.allow和at.deney文件来控制哪些用户可以使
at命令的基本形式为:
at [-f script] [-m -l -r] [time] [date]
-f script 是所要提交的脚本或命令
-l 列出当前所有等待运行的作业, atq命令具有相同的作用
-r 清除作业,为了清除某个作业,还要提供相应的作业标识(ID)
-m 作业完成后给用户发邮件
time at命令的时间格式非常灵活,可以是H,HH.HHMM,HH:MM或H:M,其中H和M分别是小时和分钟,还
date 日期格式可以是月份或日期数,而且at命令还能够识别诸如today,tomorrow这样的词
2.1 使用at命令提交命令或脚本
使用at命令提交作业有几种不同的形式,可以通过命令行方式,也可以使用at命令提示符.一般来
如果想提交若干行命令,可以在at命令后面跟上日期/时间并回车.然后就进行了at命令提示符,这
at 21:10
at> find / -name "passwd" -print
at> EOF
其中EOF就是<CTRL+D>,在21:10系统将执行一个简单的find命令
如果希望向at命令提交一个shell脚本,使用其命令行方式即可.在提交脚本时使用-f选项.
at 3.00pm tomorrow -f /apps/bin/db_table.sh
该命令将在明天下午3:00运行.
2.2 列出所提交的作业
一个作业被提交后,可以使用at -l命令来列出所有的作业
2.3 清除一个作业
清除作业的命令格式为:
atrm [job no] 或 at -r [job no]
如:
atrm job 3
3.&命令
当在前台运行某个作业时,终端被该作业占据,而在后台运行作业时,它不会占据终端.可以使用&
该命令的一般形式为:
命令 &
3.1 杀死后台进程
如果想杀死后台进程可以使用kill命令.
4.nohup命令
如果正在运行一个进程,而且觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令,该命
该命令的一般形式为:
nohup command &
4.1 使用nohup命令提交作业
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为
nohup command > myout.file 2>&1
输出被重定向到myout.file文件中.
#!/bin/sh
case "$1" in
start)
echo starting worldServer...
nohup java -Xms2G -Xmx2G -XX:+UseConcMarkSweepGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:CMSInitiatingOccupancyFraction=70 -XX:+UseCMSCompactAtFullCollection -XX:NewRatio=4 -XX:SurvivorRatio=8 -Xloggc:/data/logs/WxWorldServer/gc.log -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -cp ../server/Libs/hessian.jar:../server/Libs/ygs-1.0.1.jar:../server/Libs/serverCommon.jar:../server/WxWorldServer/wxWorldService.jar:../server/Libs/apache-log4j-extras-1.1.jar:../server/Libs/slf4j-api-1.6.1.jar:../server/Libs/slf4j-log4j12-1.6.1.jar:../server/Libs/log4j.jar:../server/Libs/json.jar:../server/Libs/openqq-sdk-v3.jar:../server/Libs/commons-codec-1.4.jar:../server/Libs/commons-httpclient-3.0.jar:../server/Libs/commons-logging-1.1.1.jar Boot ../conf worldServer_ ../server/config >/dev/null 2>&1 &
echo $! > ./worldServer.pid
echo worldServer has started!
;;
stop)
echo stop worldServer...
kill `cat ./worldServer.pid`
rm -rf ./worldServer.pid
echo worldServer has stopped!
;;
*)
esac
exit 0

浙公网安备 33010602011771号