crontab完成定时任务

Zss 发表于:

可以使用python无限循环加时间等待来完成监控,但是这样有一个缺点就是进程一直是运行的状态,当然这并不会消耗太多cpu的资源,但是若什么时候我的脚本也挂了那么我也不知道,但是使用crontab来实现就不会存在这个问题,所以使用crontab来完成定时任务

需要使用crontab定时来运行一个python脚本,这个python脚本是用来检测之前搭建confluence进程的

由于一段时间tomcat可以能一两天死一次,改了jvm内存也还是有这个问题,所以没三分钟运行一个python脚本

当监测到进程死掉了,再次开启,若进程存在则pass,判断的方式有很多,可以使用  lsof -i:8090 或者netstat -tunlp|grep 8090监测端口是否存在

不存在则挂了,也可以判断他的名字是否存在比如说 top 是否存在confluence字符,总之需要一个不变而又独一的信息来判断就好

————————netstat相关几个参数——————————

  1. netstat命令各个参数说明如下:
  2.   -t : 指明显示TCP端口

    -u : 指明显示UDP端口

    -l : 仅显示监听套接字(所谓套接字就是使应用程序能够读写与收发通讯协议(protocol)与资料的程序)

    -p : 显示进程标识符和程序名称,每一个套接字/端口都属于一个程序。

    -n : 不进行DNS轮询,显示IP(可以加速操作)

  3. 即可显示当前服务器上所有端口及进程服务,于grep结合可查看某个具体端口及服务情况··
  4. netstat -ntlp   //查看当前所有tcp端口·

    netstat -ntulp |grep 80   //查看所有80端口使用情况·

    netstat -an | grep 3306   //查看所有3306端口使用情况·

—————————————————————————————–

crontab -e  添加新的定时任务

crontab -l 查看当前的定时任务

centos7:

/bin/systemctl start crond.service                             start 开启进程  stop 关闭

1.在系统中有service这个命令时:
这个命令在red hat当中常用,有的linux发行版本中没有这个命令.
$ service crond start //启动服务
$ service crond stop //关闭服务
$ service crond restart //重启服务

2.linux发行版本没有service这个命令时:
/etc/init.d/cron stop
/etc/init.d/cron start

—————————————————————————————————————————–

*/3 * * * * python /home/python/监控java进程.py >> /home/python/监控java进程.log 2>&1

每三分钟来执行一此 /home/python/下的py文件  将log输出到/home/python/下

后面那个2>&1的意思是把错误的输出也输出到标准输出(2表示错误,2>表示错误输出,&表示等同于,1表示正确)

因此如果运行出错也会把错误输出到之前定义的log中

————————————-  py  —————————————–

#!/usr/bin/python
#coding:utf-8#
import os

test = os.popen('lsof -i:8090').read()
if '8090' in test:
    print('{}:confluence已运行,不做操作'.format(str(time.ctime())))
else:
    print('{}:confluence未运行,重启服务'.format(str(time.ctime())))
    os.system('/etc/init.d/confluence start')

—————————————————————————————-

基本格式 :
*  *  *  *  *  command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令

 

crontab文件的一些例子:
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重启apache。

45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重启apache。

10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每周六、周日的1 : 10重启apache。

0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。

0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重启apache。

0 */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小时重启apache

0 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11点到早上7点之间,每隔一小时重启apache

0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4号与每周一到周三的11点重启apache

0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一号的4点重启apache

 

实例1:每1分钟执行一次command

* * * * * command

 

实例2:每小时的第3和第15分钟执行

3,15 * * * * command

 

实例3:在上午8点到11点的第3和第15分钟执行

3,15 8-11 * * * command

 

实例4:每隔两天的上午8点到11点的第3和第15分钟执行

3,15 8-11 */2 * * command

 

实例5:每个星期一的上午8点到11点的第3和第15分钟执行

3,15 8-11 * * 1 command

 

实例6:每晚的21:30重启smb

30 21 * * * /etc/init.d/smb restart

 

实例7:每月1、10、22日的4 : 45重启smb

45 4 1,10,22 * * /etc/init.d/smb restart

 

实例8:每周六、周日的1 : 10重启smb

10 1 * * 6,0 /etc/init.d/smb restart

 

实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb

0,30 18-23 * * * /etc/init.d/smb restart

 

实例10:每星期六的晚上11 : 00 pm重启smb

0 23 * * 6 /etc/init.d/smb restart

 

实例11:每一小时重启smb

* */1 * * * /etc/init.d/smb restart

 

实例12:晚上11点到早上7点之间,每隔一小时重启smb

* 23-7/1 * * * /etc/init.d/smb restart

实例13:每月的4号与每周一到周三的11点重启smb

0 11 4 * mon-wed /etc/init.d/smb restart

 

实例14:一月一号的4点重启smb

0 4 1 jan * /etc/init.d/smb restart

 

实例15:每小时执行/etc/cron.hourly目录内的脚本

01   *   *   *   *     root run-parts /etc/cron.hourly