Shell脚本实现简单的进程管理器
需求
现在我用python写了一个前后端分离项目,每次启动都需要使用python3+脚本名称,杀死进程时还需要ps -ef | grep 脚本名称,显得非常的麻烦,考虑用shell脚本实现一个简单的进程管理器,方便管理进程
进程管理器实现
-
定义启动后端和前端的函数
start_back_end() { echo "正在启动后端..." nohup python3 start_back_end.py & sleep 1 # 等待一段时间确保进程已经启动 echo "后端启动成功" } # 定义启动前端的函数 start_front_end() { echo "正在启动前端..." nohup python3 start_front_end.py & sleep 1 # 等待一段时间确保进程已经启动 echo "前端启动成功" }
-
定义停止后端和前端的函数
# 定义停止后端的函数 stop_back_end() { echo "正在停止后端..." pkill -f start_back_end.py sleep 1 # 等待一段时间确保进程已经停止 echo "后端停止成功" } # 定义停止前端的函数 stop_front_end() { echo "正在停止前端..." pkill -f start_front_end.py sleep 1 # 等待一段时间确保进程已经停止 echo "前端停止成功" }
-
定义重启后端和前端的函数
# 定义重启后端的函数 restart_back_end() { stop_back_end sleep 1 # 等待一段时间确保进程已经停止 start_back_end } # 定义重启前端的函数 restart_front_end() { stop_front_end sleep 1 # 等待一段时间确保进程已经停止 start_front_end }
-
定义显示启动说明的函数
usage() { echo "使用说明:" echo " $0 start - 启动前端和后端" echo " $0 stop - 停止前端和后端" echo " $0 restart - 重启前端和后端" echo " $0 start-fe - 仅启动前端" echo " $0 stop-fe - 仅停止前端" echo " $0 restart-fe - 仅重启前端" echo " $0 start-be - 仅启动后端" echo " $0 stop-be - 仅停止后端" echo " $0 restart-be - 仅重启后端" }
-
主逻辑
# 主逻辑 if [ "$#" -ne 1 ]; then usage exit 1 fi case "$1" in start) start_front_end start_back_end ;; stop) stop_front_end stop_back_end ;; restart) restart_front_end restart_back_end ;; start-fe) start_front_end ;; stop-fe) stop_front_end ;; restart-fe) restart_front_end ;; start-be) start_back_end ;; stop-be) stop_back_end ;; restart-be) restart_back_end ;; *) usage exit 1 ;; esac
-
脚本全部内容
#!/bin/bash # 定义启动后端的函数 start_back_end() { echo "正在启动后端..." nohup python3 start_back_end.py & sleep 1 # 等待一段时间确保进程已经启动 echo "后端启动成功" } # 定义启动前端的函数 start_front_end() { echo "正在启动前端..." nohup python3 start_front_end.py & sleep 1 # 等待一段时间确保进程已经启动 echo "前端启动成功" } # 定义停止后端的函数 stop_back_end() { echo "正在停止后端..." pkill -f start_back_end.py sleep 1 # 等待一段时间确保进程已经停止 echo "后端停止成功" } # 定义停止前端的函数 stop_front_end() { echo "正在停止前端..." pkill -f start_front_end.py sleep 1 # 等待一段时间确保进程已经停止 echo "前端停止成功" } # 定义重启后端的函数 restart_back_end() { stop_back_end sleep 1 # 等待一段时间确保进程已经停止 start_back_end } # 定义重启前端的函数 restart_front_end() { stop_front_end sleep 1 # 等待一段时间确保进程已经停止 start_front_end } # 显示使用说明的函数 usage() { echo "使用说明:" echo " $0 start - 启动前端和后端" echo " $0 stop - 停止前端和后端" echo " $0 restart - 重启前端和后端" echo " $0 start-fe - 仅启动前端" echo " $0 stop-fe - 仅停止前端" echo " $0 restart-fe - 仅重启前端" echo " $0 start-be - 仅启动后端" echo " $0 stop-be - 仅停止后端" echo " $0 restart-be - 仅重启后端" } # 主逻辑 if [ "$#" -ne 1 ]; then usage exit 1 fi case "$1" in start) start_front_end start_back_end ;; stop) stop_front_end stop_back_end ;; restart) restart_front_end restart_back_end ;; start-fe) start_front_end ;; stop-fe) stop_front_end ;; restart-fe) restart_front_end ;; start-be) start_back_end ;; stop-be) stop_back_end ;; restart-be) restart_back_end ;; *) usage exit 1 ;; esac
脚本运行效果
-
启动进程
./control.sh start
-
结束进程
./control.sh stop
-
重启进程
./control.sh restart