在日常开发和部署 python web 服务(如 fastapi、flask、django、socket 服务等)时,经常需要频繁启动、停止、重启进程。如果每次都手动 ps -ef | grep 再 kill -9,实在是太麻烦了!
今天分享一个我自己用了好几年的「终极启停脚本」,功能完整、输出美观、逻辑健壮,直接扔到服务器上就能用,强烈建议收藏!
最终效果演示
$ ./manager.sh start ##: 启动成功(start successfully) ~ $ ./manager.sh stop ##: 已停止(stopped) ... $ ./manager.sh restart ##: 已停止(stopped) ... ##: 启动成功(start successfully) ~
已经运行时重复启动会有友好提示:
$ ./manager.sh start ##: 服务已经在运行中(the service is already running)
完整脚本(已亲测可用)
将以下内容保存为 manager.sh(或者你喜欢的名字),放在项目根目录,和 server.py 同级:
#!/bin/bash
# 要管理的 python 服务文件名(可修改)
server_name="server.py"
# 彩色输出定义
red='\033[31m'
green='\033[32m'
yellow='\033[33m'
cyan='\033[36m'
reset='\033[0m'
start() {
# 检查是否已有进程在运行(取第一个匹配的 pid)
pid=$(ps -ef | grep -v grep | grep ${server_name} | awk 'nr==1{print $2}')
if [[ -z "$pid" ]]; then
echo -e "${yellow}正在启动 ${server_name} ...${reset}"
nohup python3 ${server_name} > server.log 2>&1 &
sleep 2 # 给进程一点启动时间
# 再次检查是否真的启动成功
pid=$(ps -ef | grep -v grep | grep ${server_name} | awk 'nr==1{print $2}')
if [[ -n "$pid" ]]; then
echo -e "${cyan} ##: 启动成功(start successfully) ~${reset}"
else
echo -e "${red} 启动失败(failed to activate),请查看 server.log${reset}"
fi
else
echo -e "${green} ##: 服务已经在运行中(the service is already running),pid: $pid${reset}"
fi
}
stop() {
pid=$(ps -ef | grep -v grep | grep ${server_name} | awk 'nr==1{print $2}')
if [[ -n "$pid" ]]; then
kill -9 $pid
echo -e "${green} ##: 已停止(stopped),pid $pid 已结束${reset}"
else
echo -e "${yellow} ##: 未检测到运行中的服务${reset}"
fi
}
restart() {
echo -e "${yellow}正在重启服务...${reset}"
stop
sleep 1
start
}
# 使用说明
usage() {
echo "usage: $0 {start|stop|restart}"
exit 1
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
usage
;;
esac
exit 0
使用方法(三步搞定)
将脚本保存为 manager.sh
赋予执行权限:
chmod +x manager.sh
使用:
./manager.sh start # 启动 ./manager.sh stop # 停止 ./manager.sh restart # 重启
脚本亮点总结
| 功能 | 说明 |
|---|---|
| 防止重复启动 | 检测到已有进程就提示,不再重复启动 |
| 彩色日志输出 | 看起来舒服,状态一目了然 |
| 启动失败自动提示 | 启动后会二次检查进程是否存在 |
| 支持 restart | 先 stop 再 start,一键重启 |
| 日志输出到 server.log | 后台运行不干扰终端,日志可随时查看 |
| 仅 50 行左右 | 短小精悍,改起来也方便 |
可选增强(进阶玩家)
- 想管理多个服务?把
server_name改成参数传入即可 - 想开机自启?配合
systemd或crontab -e加@reboot - 想支持端口占用检测?加一句
lsof -i:8000
写在最后
这个脚本我从 2021 年用到现在,几乎所有个人项目和小公司服务器都在用,稳定得一批!
强烈建议每个 python 后端开发者都准备一个,省时省力又装逼(不是)
到此这篇关于linux下一键启停python服务脚本的超实用方法的文章就介绍到这了,更多相关linux启停python脚本内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论