linux 定时启动任务
有人会说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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |