当家乡入冬 的时候
列车到站 以后
小时候的风 再吹过
回忆起单纯 的快乐
在熟悉的 街头
有人 会用所有的温柔 喊出你的
名字
🎵 毛不易《无名的人》
在开发和维护Python应用时,我们常常需要在后台运行和管理多个Python脚本。无论是数据处理、网络服务还是任何自动化任务,一个可靠且灵活的启动脚本都是提高工作效率和确保系统稳定运行的关键。本文将介绍一个实用的启动脚本解决方案,用于控制Python脚本的启动和停止,帮助你简化管理流程。
脚本概览
我们设计的脚本提供了一种简单的方式来启动和停止指定的Python脚本。通过声明一个名为scripts
的关联数组,你可以轻松配置要管理的脚本及其执行路径。该脚本利用nohup
和&
使Python脚本在后台运行,同时将输出重定向到指定的日志文件中,便于后续查看和问题排查。
#!/bin/bash
# 配置Python环境路径
PYTHON_ENV="/path/to/your/python/environment/bin/python"
# 配置应用目录
APP_DIR="/path/to/your/application/directory"
# 配置日志目录
LOG_DIR="$APP_DIR/log"
# 定义要管理的Python脚本名称和对应日志文件名
declare -A scripts=(
["testScript1"]="test_script1.py"
["testScript2"]="test_script2.py"
)
# 停止脚本函数
stop_scripts() {
for script in "${!scripts[@]}"; do
echo "Stopping $script..."
PID=$(ps -ef | grep "${scripts[$script]}" | grep -v grep | awk '{print $2}')
if [ ! -z "$PID" ]; then
kill -9 $PID
echo "已经kill进程: $PID"
else
echo "$script 未运行."
fi
done
}
# 启动脚本函数
start_scripts() {
for script in "${!scripts[@]}"; do
echo "Starting $script..."
nohup $PYTHON_ENV $APP_DIR/${scripts[$script]} > $LOG_DIR/${script}.log 2>&1 &
echo "$script 启动完成."
done
}
# 主逻辑
case "$1" in
start)
start_scripts
;;
stop)
stop_scripts
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
脚本配置
脚本的配置包含三个主要部分:Python环境路径、应用目录和日志目录。通过修改脚本顶部的变量值来适配你的环境设置:
- PYTHON_ENV:指向你的Python环境的可执行文件路径。
- APP_DIR:包含你的Python脚本的目录。
- LOG_DIR:用于存放日志文件的目录。
脚本功能
脚本提供了两个主要功能:启动和停止脚本。
- 启动脚本:遍历
scripts
数组,使用nohup
在后台启动每个指定的Python脚本,并将其输出重定向到日志文件。 - 停止脚本:查找scripts数组中每个脚本对应的进程ID,并使用
kill -9
命令强制停止它们。
使用方法
脚本的使用非常简单,只需通过命令行传入一个参数start
或stop
来启动或停止所有配置的Python脚本:
./script_name.sh start # 启动所有配置的脚本
./script_name.sh stop # 停止所有运行中的脚本
实践建议
- 配置管理:为了提高脚本的可维护性,可以将脚本配置信息存放在外部文件中,通过源命令(source)加载这些配置。
- 日志管理:定期检查和管理日志文件,以防止日志文件占用过多磁盘空间。
安全性:在使用kill -9强制停止进程时要谨慎,确保不会意外终止其他重要进程。
结论
通过使用这个启动脚本,你可以更高效地管理Python脚本的执行,无论是在开发环境还是生产环境中。它不仅简化了启动和停止脚本的流程,还为日志管理和问题排查提供了便利。希望这个解决方案能够帮助你更好地管理和维护你的Python应用。