快速业务通道

linux 定时启动任务

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-03-26

有人会说linux不是有crontab 定时运行的命令吗.是的,但不能运行这个程序之前,杀死这个程序的进程.这就需要再写个脚本来杀死进程,再启动程序.

思考了下,完成这个任务有四个步骤:

1.查找到程序在后台运行的进程号;

2.杀死进程;

3.进入程序目录;

4.启动程序;

第一步:查找进程

ps -ef;no,不是的,我的是在windows环境中安装了linux的内核(cygwin),相当于有了linux环境,但还是有windows和linux的区别的,windows中的程序进程查找方式得用windows的,linux是不可以的.cygwin中有ps -aW 查找windows下所有的进程.记得W是大写的.接下来还需查出想要的程序进程号.grep 进程名.但如果你想完全匹配进程名的话,需加上参数 -w;awk ''{$n}'':表示找出进程在第n列的进程号;

第二步:杀死进程

kill 进程号.不,也不是滴,windows进程是不能用这个命令杀死的.如果上一步查到了进程号,用它杀的话,会出现进程找不到的错误提示.这回你是不是纳闷了.哈哈.cygwin中提供一个tskill的命令用来杀死windows进程的.

第三步:进入程序目录

1.最好先进入linux的根目录 cd /(这样方便启动windows程序);

2.在进入windows程序目录 cd cygdrive/(c/d/e/f)这里的c,d,e,f相当于windows的盘(建议目录不要有空格,不然会很麻烦)

第四步:启动程序

./run.bat

完整程序:

#!/bin/sh

cd /;

GatherHome=cygdrive/D/programConfig/GatherServer

cd $GatherHome;

pid=`ps -aW | grep -w GatherServer.exe|awk ''{print $1}''`//这里的print最好不要丢哦

if [ "$pid" != "" ]; then

echo "kill current gather pid: " $pid;

tskill $pid;

sleep 20;//注意:这里很重要哦

./gather.bat;

else

echo "first open!";

./gather.bat;

fi

crontab -e

0 */6 * * * /home/Administrator/run.sh //定时每六小时执行run.sh

注意:

一、sleep 20;//这里很重要哦(睡眠二十秒),为什么要这样呢?为什么需要睡眠二十秒?

第一个问题原因:便于观察进程关闭和之后的启动状态;

第二个,我的程序关联着端口,打开端口和关闭端口都需要时间;如果没有设置睡眠时间或设置时间太小,会出现address already in use.这会让你纳闷好一阵了.可能会想,怎么可能我明明把进程关了啊,然后在网上一找一大堆linux东东,如果没有些linux基础估计很难搞懂吧.(哈哈,题外话)

二、if的中括号内内容需用空格把内容和括号隔开.

三、 还有一种方法查找进程号pidof processName,但在cygwin中不能用

本文出自 “艰难困苦 玉汝于成” 博客,谢绝转载!

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号