启动服务脚本

154 阅读2分钟
#!/bin/bash
# 查找 nginx 进程的 PID
PID=$(ps aux | grep '[x]xl-job-admin' | awk '{print $2}')

# 终止进程
if [ -n "$PID" ]; then
    kill -9 "$PID"
    echo "已终止 xxl-job-admin 进程:$PID"
else
    echo "未找到 xxl-job-admin 进程。"
fi

# Java VM Params
JAVA_OPTS=""
java $JAVA_OPTS -jar /home/shenjy/xxl-job/xxl-job-admin/xxl-job-admin-2.3.0.jar &

注释:可以通过修改 grep 的匹配模式,避免匹配到 grep 自身。

# 使用 [x]xl-job-admin
ps -ef | grep '[x]xl-job-admin'

# 不使用 xxl-job-admin
ps -ef | grep xxl-job-admin

具体解释如下面描述:

在执行 ps -ef | grep xxl-job-admin 时,grep 命令会匹配到自身的原因是因为 grep 的命令行中包含了 xxl-job-admin 这个字符串。以下是详细解释:


1. ps -ef 的输出

ps -ef 会列出系统中所有进程的详细信息,包括每个进程的命令行。例如:

UID        PID  PPID  C STIME TTY          TIME CMD
root      389152  366070 82 15:43 pts/3    00:00:20 java -jar xxl-job-admin-2.3.0.jar
root      389609  372484  0 15:44 pts/7    00:00:00 grep --color=auto xxl-job-admin
  • 第一行是 xxl-job-admin 进程。
  • 第二行是 grep 命令本身。

2. grep 的工作原理

grep 会逐行扫描输入(这里是 ps -ef 的输出),并匹配包含指定模式(这里是 xxl-job-admin)的行。

  • grep 扫描到 xxl-job-admin 进程时,会匹配并输出这一行。
  • grep 扫描到自己的命令行时,也会匹配并输出这一行,因为它的命令行中包含 xxl-job-admin

3. 为什么 grep 会匹配到自己?

grep 的命令行是:

grep --color=auto xxl-job-admin
  • 这个命令行中包含了 xxl-job-admin,因此 grep 会匹配到自己。

4. 如何避免匹配到 grep 自身?

可以通过修改 grep 的匹配模式,使其不会匹配到自己的命令行。例如:

ps -ef | grep '[x]xl-job-admin'
  • 原理
    • [x]xl-job-admin 会匹配 xxl-job-admin,但不会匹配 grep xxl-job-admin,因为 grep 的命令行是 grep --color=auto xxl-job-admin,而 [x]xl-job-admin 不会匹配到 grep

5. 优化后的命令

ps -ef | grep '[x]xl-job-admin'
  • 输出
    root      389152  366070 82 15:43 pts/3    00:00:20 java -jar xxl-job-admin-2.3.0.jar
    

这样只会输出 xxl-job-admin 进程的信息,而不会包含 grep 自身。


总结

  • 原因grep 的命令行中包含 xxl-job-admin,因此会匹配到自己。
  • 解决方法:使用 grep '[x]xl-job-admin' 避免匹配到 grep 自身。
  • 核心原理:通过修改匹配模式,使 grep 不会匹配到自己的命令行。