Linux - shell 脚本后台运行某条命令 - 输出为 pid 文件 - Shell脚本模板

Shell 模板脚本参数具体解释:

$! 输出命令运行后获取到的进程号,注意是 美元符号$和感叹号!

$? 的原理是shell使用关键字PID来获取最后一条命令及命令进程ID,
并用它来获取最后一条命令的执行状态,通过返回两个数字,
来判断执行结果:返回 0 表示命令执行成功,返回大于 0 表示命令失败。
例如:echo $? 
如果命令执行成功,则会输出 0 

shell 脚本模板演示

可以用替换的方法,将 python test.py 替换为自己的命令

#!/bin/bash
# shell 脚本的当前路径
current_path=$(pwd)
# 配置 pid 文件名
pid_file="test.pid"
# 绝对路径配置 当前路径 斜杠 pid 文件名
output=$current_path/$pid_file
# 输出 pid 文件的绝对路径
echo $output
# 如果 pid 文件存在 -f
if [ -f "$output" ];then
    echo "pid文件存在"
    PID=$(cat $output)

    PID_EXIST=$(ps aux | awk '{print $2}'| grep -w $PID)
	# 如果 pid 文件存在,但是 pid 文件不存在 pid 进程号,找不到 pid 进程
    if [ ! $PID_EXIST ];then
	    echo the process $PID is not exist
	    echo starting python test.py command 新进程将会覆盖 pid 文件
		# 后台运行 —— 守护进程 
		# $! 输出命令运行后获取到的进程号,注意是 美元符号$和感叹号!
	    nohup python test.py > /home/test/mytest.log 2>&1 & echo $! > $output
	    echo the new process $! is running
	    echo python test.py command Started
	    echo Success Started
    else
		# 存在 pid 进程号
	    echo the process $PID exist
		# 删除进程,重新运行
	    kill -9 $PID
	    # 如果删除进程成功
	    if [ $? -eq 0 ]; then 
	    	echo "kill the process $PID" 
	    else
		    #删除进程失败
		    echo "failed kill the process $PID"
		    echo "python test.py command Stop"
		    return
	    fi
	    # 暂停 1 秒
	    echo need to sleep 1 s ...
	    sleep 1
	    echo 1 s ...
	
		# 后台运行 —— 守护进程
	    nohup python test.py > /home/test/mytest.log 2>&1 & echo $! > $output
	    echo the new process $! is running
	    echo python test.py command Started
	    echo Success restart
    fi
else
    echo "pid文件不存在"
    # 新建 pid 文件
    touch $output
    echo "新建 pid 文件:"$output
	# 暂停 1 秒
    echo need to sleep 1 s ...
    sleep 1
    echo 1 s ...
	# 后台运行 —— 守护进程
    nohup python test.py > /home/test/mytest.log 2>&1 & echo $! > $output
    echo the new process $! is running
    echo python test.py command Started
    echo Success started

fi

参考链接

1. shell 判断pid是否真实存在

2. shell 判断文件夹或文件是否存在

3. shell脚本怎么判断上一条命令执行成功,如果失败退出并回滚

你可能感兴趣的:(Linux,计算机使用技巧,linux,运维,经验分享)