您的位置:首页 > 运维架构 > Linux

Linux上定时任务发布及锁定(2)

2017-11-12 11:08 99 查看
一,发布定时任务

1.发布定时任务时,有些任务执行时间很长在此期间,你希望在去启动一个相同的进程,就需要去加锁,怎么加锁呢,例如:

 我要每天晚上十点启动一个任务,在etc/crontab中添加如下命令:

00 22 * * * root /usr/bin/flock -xn /etc/cron.sharp/Diff.lock -c '/etc/cron.sharp/Diff.sh'

a.Diff.lock文件内容可以为空

b.Diff.sh文件内容如下

#!/bin/sh

cd /data/sqlview

java -Dfile.encoding=UTF-8 -classpath .:/data/sqlview/lib/sqljdbc4.jar:/data/sqlview/lib/ant-1.6.jar:/data/sqlview/lib/commons-logging-1.1.3.jar:/data/sqlview/lib/log4j-1.2.15.jar:/data/sqlview/lib/ibatis-2.3.0.677.jar:/data/sqlview/lib/mail-1.4.jar:/data/sqlview/lib/commons-net-3.3.jar:/data/sqlview/bin
jp.co.crm.batch.DaliyBatch 0 2

2.在制定的 /data目录下放一个sqlview项目就可以了,晚上十点就会去跑该项目的jp.co.crm.batch.DaliyBatch的main函数,并传入两个参数0,2

二.定时任务被锁定,如下所示

[root@CentosBATCH cron.sharp]# ps aux|grep Diff

root     26887  0.0  0.0 103316   840 pts/1    S+   11:58   0:00 grep Diff

root     32246  0.0  0.0 100900   216 ?        Ss   Nov09   0:00 /usr/bin/flock -xn /etc/cron.sharp/Diff.lock -c /etc/cron.sharp/Diff.sh

root     32253  0.0  0.0 106108   364 ?        S    Nov09   0:00 /bin/sh /etc/cron.sharp/Diff.sh

flock 用于锁定任务,锁定之后定时任务不在执行.sh文件

因为Diff.sh中执行的文件是DaliyBatch.class,所以查找ps aux|grep Daliy*,如下

[root@CentosBATCH data]# ps aux|grep Dal*

root      2256  0.0  0.0  80956   584 ?        S    Oct14   0:00 /usr/sbin/sendmail -FCronDaemon -i -odi -oem -oi -t -f root

root      3412  0.0  0.0 103320   868 pts/1    S+   08:28   0:00 grep Dal*

root     31550  0.0  0.2 1529484 4820 ?        Sl   Nov12   0:34 java -Dfile.encoding=UTF-8 -classpath .:/data/sqlview/lib/sqljdbc4.jar:/data/sqlview/lib/ant-1.6.jar:/data/sqlview/lib/commons-logging-1.1.3.jar:/data/sqlview/lib/log4j-1.2.15.jar:/data/sqlview/lib/ibatis-2.3.0.677.jar:/data/sqlview/lib/mail-1.4.jar:/data/sqlview/lib/commons-net-3.3.jar:/data/sqlview/bin
jp.co.crm.batch.DaliyBatch 0 2

root     31597  0.0  0.0  80956   596 ?        S    Nov12   0:00 /usr/sbin/sendmail -FCronDaemon -i -odi -oem -oi -t -f root

三.解锁

kill -9 31550

[root@CentosBATCH data]# ps aux|grep Dal*

root      2256  0.0  0.0  80956   584 ?        S    Oct14   0:00 /usr/sbin/sendmail -FCronDaemon -i -odi -oem -oi -t -f root

root      3419  0.0  0.0 103320   868 pts/1    S+   08:29   0:00 grep Dal*

[root@CentosBATCH data]# ps aux|grep iff

root      3421  0.0  0.0 103316   844 pts/1    S+   08:29   0:00 grep iff

You have mail in /var/spool/mail/root

或者如下,但是下面执行后进程31550并不会消失

Ps aux|grep Diff

找到Diff的process id Diff的process id.以下用#####代表

Kill -9 #####

kill -9 32253

kill -9 32246 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux