Linux 下如何监听我们的脚本是否掉线了

检测liunx 脚本是否在运行

需要用到知识是,首先我们需要知道这个脚本运行之后,会有个 进程,那么我们可以通过判断进程来获取是否在运行。进程存在则表示运行中,进程不存在,则表示退出了,所以需要重启动一下。那么我们这个可以做哪些方面呢。

可用场景

  • nginx 监听是否掉线
  • mysql 监听是否掉线
  • redis 监听是否掉线
  • php 脚本
  • sh 脚本
  • 等等其他脚本

查看进程ps

ps (英文全拼:process status)命令用于显示当前进程的状态,类似于 windows 的任务管理器。
参数语法:
语法说明:

UID      :程序被该 UID 所拥有
PID      :就是这个程序的 ID 
PPID    :则是其上级父程序的ID
C          :CPU使用的资源百分比
STIME :系统启动时间
TTY     :登入者的终端机位置
TIME   :使用掉的CPU时间。
CMD   :所下达的是什么指令
  • -A 列出所有的行程

黑白课堂

黑白课堂

  • -au 显示较详细的资讯
    黑白课堂

黑白课堂

  • -aux 显示所有包含其他使用者的行程

黑白课堂

黑白课堂

检查进程

比如我们现在运行了php websocket.php start,那我现在需要监听它是否一致运行着。

//检查下这个脚本相关的进程有多少个

#!/bin/bash
count=`ps -fe |grep "websocket.php" | grep -v "grep" | wc -l`

黑白课堂
如果要把命令返回值赋值给变量名,就

cont = `命令返回值`

全部脚本

#!/bin/bash
now=`date "+%Y-%m-%d %H:%M:%S"`
count=`ps -fe |grep "websocket.php" | grep -v "grep" | wc -l`
echo $count
if [ "$count" -le 0 ]
then
    nohup /usr/bin/php /www/wwwroot/swoole/websocket.php start  &>> /www/wwwroot/swoole/webscoket.log  & 
    echo "${now}:webscoket开始运行"
else
    echo "${now}:webscoket已运行"
fi

重启动进程

现在我们要杀死它

ps -aux |grep "websocket.php" | grep -v "grep"| awk '{print $2}'|xargs kill -9

综合我们全部脚本变成

#!/bin/bash
count=`ps -fe |grep "websocket.php" | grep -v "grep" | wc -l`
echo $count
if [ "$count" -gt 0 ]
then
    ps -eaf |grep "socket.php" | grep -v "grep"| awk '{print $2}'|xargs kill -9
    sleep 1
    count=`ps -fe |grep "websocket.php" | grep -v "grep" | wc -l`
    if [ "$count" -eq 0 ]
    then
        echo "Websoket stop success"
    else
        echo "Stop fail"
    fi
else
    echo "Not runing";
fi  

Linux grep 命令用于查找文件里符合条件的字符串。

语法

grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>][-d<进行动作>][-e<范本样式>][-f<范本文件>][--help][范本样式][文件或目录...]
  • -a 或 --text : 不要忽略二进制的数据。
  • -A<显示行数> 或 --after-context=<显示行数> : 除了显示符合范本样式的那一列之外,并显示该行之后的内容。
  • -B<显示行数> 或 --before-context=<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前的内容。
  • -c 或 --count : 计算符合样式的列数。
  • -C<显示行数> 或 --context=<显示行数>或-<显示行数> : 除了显示符合样式的那一行之外,并显示该行之前后的内容。
  • -d <动作> 或 --directories=<动作> : 当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
  • -e<范本样式> 或 --regexp=<范本样式> : 指定字符串做为查找文件内容的样式。
  • -E 或 --extended-regexp : 将样式为延伸的正则表达式来使用。
  • -f<规则文件> 或 --file=<规则文件> : 指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
  • -F 或 --fixed-regexp : 将样式视为固定字符串的列表。
  • -G 或 --basic-regexp : 将样式视为普通的表示法来使用。
  • -h 或 --no-filename : 在显示符合样式的那一行之前,不标示该行所属的文件名称。
  • -H 或 --with-filename : 在显示符合样式的那一行之前,表示该行所属的文件名称。
  • -i 或 --ignore-case : 忽略字符大小写的差别。
  • -l 或 --file-with-matches : 列出文件内容符合指定的样式的文件名称。
  • -L 或 --files-without-match : 列出文件内容不符合指定的样式的文件名称。
  • -n 或 --line-number : 在显示符合样式的那一行之前,标示出该行的列数编号。
  • -o 或 --only-matching : 只显示匹配PATTERN 部分。
  • -q 或 --quiet或--silent : 不显示任何信息。
  • -r 或 --recursive : 此参数的效果和指定"-d recurse"参数相同。
  • -s 或 --no-messages : 不显示错误信息。
  • -v 或 --invert-match : 显示不包含匹配文本的所有行。
  • -V 或 --version : 显示版本信息。
  • -w 或 --word-regexp : 只显示全字符合的列。
  • -x --line-regexp : 只显示全列符合的列。
  • -y : 此参数的效果和指定"-i"参数相同。

Linux xargs 命令

xargs(英文全拼: eXtended ARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。

  • xargs 可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。
  • 将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行
  • 默认的命令是 echo,这意味着通过管道传递给 xargs 的输入将会包含换行和空白,不过通过 xargs 的处理,换行和空白将被空格取代

语法

somecommand |xargs -item  command

例子讲解

test.txt 文件内容

a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z

参数

  • -a file 从文件中读入作为sdtin
  • -e flag ,注意有的时候可能会是-E,flag必须是一个以空格分隔的标志,当xargs分析到含有flag这个标志的时候就停止。
  • -p 当每次执行一个argument的时候询问一次用户。
kongqi@LAPTOP-146FSC2U:/www/wwwroot/swoole$ cat a.txt | xargs  -p -n1
echo aaa ?...
echo bbb ?...
echo ddd ?...
echo ?...
  • -n num 后面加次数,每行显示的个数

黑白课堂

  • -t 表示先打印命令,然后再执行。
kongqi@LAPTOP-146FSC2U:/www/wwwroot/swoole$ cat a.txt | xargs  -t
echo aaa bbb ddd 
aaa bbb ddd
  • -i 或者是-I,这得看linux支持了,将xargs的每项名称,一般是一行一行赋值给 {},可以用 {} 代替。
  • -r no-run-if-empty 当xargs的输入为空的时候则停止xargs,不用再去执行了。
kongqi@LAPTOP-146FSC2U:/www/wwwroot/swoole$ cat a.txt | xargs  -r -p -n1
echo aaa ?...
echo bbb ?...
echo ddd ?...
  • -s num 命令行的最大字符数,指的是 xargs 后面那个命令的最大命令行字符数。
  • -L num 从标准输入一次读取 num 行送给 command 命令。
  • -l 同 -L。
kongqi@LAPTOP-146FSC2U:/www/wwwroot/swoole$ ls *.txt | xargs -n1 -I {}  

kongqi@LAPTOP-146FSC2U:/www/wwwroot/swoole$ ls *.txt | xargs -n1 -I {}  -l
a.txt
text.txt
  • -d delim 分隔符,默认的xargs分隔符是回车,argument的分隔符是空格,这里修改的是xargs的分隔符。 移除分割替换为空格
kongqi@LAPTOP-146FSC2U:/www/wwwroot/swoole$ echo "name=kongqi&age=39" | xargs -d=
name kongqi&age 39
kongqi@LAPTOP-146FSC2U:/www/wwwroot/swoole$ echo "name=kongqi&age=39" | xargs -d\& -n1
name=kongqi
age=39
  • -x exit的意思,主要是配合- s 使用。。
  • -P 修改最大的进程数,默认是1,为0时候为as many as it can ,这个例子我没有想到,应该平时都用不到的吧。

kill 相关知识

  • -1 (HUP):重新加载进程。
  • -9 (KILL):杀死一个进程。
  • -15 (TERM):正常停止一个进程。

Linux wc命令

语法

wc [-clw][--help][--version][文件...]
  • - c 或--bytes或--chars 只显示Bytes数。
  • - l 或--lines 只显示行数。
  • - w 或--words 只显示字数。
  • --help 在线帮助。
  • --version 显示版本信息。

评论区 (0)

没有记录
支持 markdown,图片截图粘贴拖拽都可以自动上传。
黑白课堂

黑白课堂 · 技术专家

专业PHP开发

年度VIP 站长创业者玉树凌风每天醒来0收入
查看更多

最新视频课程