Linux监听进程是否存在,并加入定时任务
2017-12-02 17:07
190 查看
前言
我们在linux主机上可能需要一直运行某一服务,如果关机后或者误杀,使得服务停止,从而影响日常的任务。比如一BI项目数据库的抽取,使用Taskctl调度,在每天固定时间进行数据的抽取,如果主机上Taskctl相关的服务进程被关闭的话,就会影响到数据的抽取!定时任务(调度)
在LINUX中,周期执行的任务一般由cron这个守护进程来处理
[ps -ef|grep cron]。
cron读取一个或多个配置文件,这些配置文件中包含了命令行及其调用时间。
cron的配置文件称为“crontab”,是“cron table”的简写。
下面简单说一下crontab的相关内容。
分类
Linux下的任务调度分为两类:系统任务调度和用户任务调度。系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
/etc/crontab文件包括下面几行:
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=""HOME=/ # run-parts 51 * * * * root run-parts /etc/cron.hourly 24 7 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly
1
2
3
4
5
6
7
8
前四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务执行信息给用户,第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。
用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab文件都被保存在
/var/spool/cron目录中。其文件名与用户名一致,使用者权限文件如下:
/etc/cron.deny该文件中所列用户不允许使用crontab命令
/etc/cron.allow该文件中所列用户允许使用crontab命令
/var/spool/cron/所有用户crontab文件存放的目录,以用户名命名
创建任务
crontab -e,然后就会有个vi编辑界面,再输入一定格式的内容到里面 :wq 保存退出,即创建一个定时任务。
该一定格式的内容包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。
每个域之间使用空格或者制表符分隔。格式如下:
minute hour day-of-month month-of-year day-of-week commands
1
对应的合法值
00-59,
00-23,
01-31,
01-12,
0-6 (0 is sunday),
commands(代表要执行的脚本)
除了数字还有几个特殊的符号就是星号
"*"、斜杠
"/"、中划线
"-"、逗号
","。
*代表所有的取值范围内的数字,
/代表每的意思,
/5表示每5个单位,
-代表从某个数字到某个数字,
,分开几个离散的数字。
比如:
0 0 * * * sh /home/sh/monitor.sh,每天凌晨0点0分执行monitor.sh这个脚本。
更多内容可以参考:linux下添加定时任务
crond服务相关命令
/sbin/service crond start //启动服务 /sbin/service crond stop //关闭服务 /sbin/service crond restart //重启服务 /sbin/service crond reload //重新载入配置 /sbin/service crond status //查看服务状态
1
2
3
4
5
查看crontab服务是否已设置为开机启动,执行命令:
ntsysv,此命令需要是root用户。
加入开机自动启动:
chkconfig --level 5 crond on
之后查看:
chkconfig --list|grep crond
监听服务进程是否存在
上边说了定时任务,每天固定时间执行shell脚本,那么这个脚本我们可以写上监听该服务进程的内容。monitor.sh
这里以Taskctl相关服务为例:
#!/bin/sh NOWTIME=$(date +%Y%m%d_%H%M%S) ps -fe|grep emnls|grep -v grep if [ $? -ne 0 ] then echo $NOWTIME" stopped.....">>/home/mars/checkprolog.txt eminit ctlinit ctlstart else echo $NOWTIME " running....." >>/home/mars/checkprolog.txt fi
1
2
3
4
5
6
7
8
9
10
11
12
其中,
NOWTIME=$(date +%Y%m%d_%H%M%S)得到当前系统时间,没有什么好说的,注意date后边有一个空格!
emnls为Taskctl核心服务进程名称。
$? -ne 0不存在,
$? -eq 0存在。
shell的if else 语法以及大于,小于等逻辑表达式:
if .... then .... elif .... then .... else .... fi
1
2
3
4
5
6
7
8
9
大多数情况下,可以使用测试命令来对条件进行测试。比如可以比较字符串、判断文件是否存在及是否可读等等… 通常用” [ ] “来表示条件测试。注意这里的空格很重要,要确保方括号的空格。
[ -f "somefile" ]:判断是否是一个文件
[ -x "/bin/ls" ]:判断
/bin/ls是否存在并有可执行权限
[ -n "$var" ]:判断
$var变量是否有值
[ "$a" = "$b" ]:判断
$a和
$b是否相等
对一个文件的判断:
-r file 用户可读为真 -w file 用户可写为真 -x file 用户可执行为真 -f file 文件为正规文件为真 -d file 文件为目录为真 -c file 文件为字符特殊文件为真 -b file 文件为块特殊文件为真 -s file 文件大小非0时为真 -t file 当文件描述符(默认为1)指定的设备为终端时为真
1
2
3
4
5
6
7
8
9
对于不含变量的任务简单shell脚本一般能胜任。但在执行一些决策任务时,就需要包含if/then的条件判断了。shell脚本编程支持此类运算,包括比较运算、判断文件是否存在等。基本的if条件命令选项有:
- eq —比较两个参数是否相等(例如,if [ 2 –eq 5 ])
-ne —比较两个参数是否不相等 -lt —参数1是否小于参数2 -le —参数1是否小于等于参数2 -gt —参数1是否大于参数2 -ge —参数1是否大于等于参数2 -f — 检查某文件是否存在(例如,if [ -f "filename" ]) -d — 检查目录是否存在
1
2
3
4
5
6
7
几乎所有的判断都可以用这些比较运算符实现。脚本中常用-f命令选项在执行某一文件之前检查它是否存在。
参考文章:用shell脚本监控进程是否存在 不存在则启动的实例
相关文章推荐
- Linux监听进程是否存在,并加入定时任务
- linux定时任务进程是否存在,并添加定时任务
- Linux之————守护进程与crond定时任务
- linux进程管理-定时定期执行任务
- linux下检测进程是否存在的标准做法
- Linux下检测进程是否存在
- 在Linux下利用crond实现一个定时任务并完成一个守护(精灵)进程
- [Linux]系统管理: 进程管理(ps/top/pstree/kill/pkill), 工作管理, 系统资源查看, 系统定时任务
- linux 判断某个进程是否存在,存在则重启,不存在则启动。
- linux判断进程或者cron是否存在shell
- Linux判断进程是否存在并启动该进程
- linux进程时间定时任务命令
- linux 检测进程是否存在,并统计进程数的有用的方法和脚本
- Linux非法ip通过脚本执行定时任务加入防火墙
- 树莓派加入定时任务实现花生壳定时重启(linux的定时任务)
- 定时检测Memcached进程是否存在,若不存在自动启动它
- 判断LINUX进程是否存在
- Linux下父进程通过管道发送文件名给子进程,子进程获取文件名后首先判断文件是否存在,不存在,通过管道返回错误信息,存在,将文件内容返回给父进程
- shell 查看Linux 进程 是否存在
- linux下php检查进程是否存在