python项目在linux中的启动脚本(shell脚本)

背景:

  在linux环境,使用shell脚本,实现对某个服务的启动、停止功能。

shell脚本的功能:

  1. 启动(start):通过参数 start ,实现启动服务。如果该服务已经启动,给出已经启动的提示信息,避免重复启动该服务;如果未启动,启动该服务。
  2. 关闭(stop):通过参数 stop ,实现停止服务。如果该服务已停止,给出已关闭的提示信息。如果服务已启动,停止该服务。
  3. 提示信息:如果没有传递任何参数,给出可用参数的提示信息。

实现:

ps:以python实现的定时任务为例,说明服务启动、关闭脚本的实现

shell 复制代码
# 服务配置
# python 项目使用的虚拟环境路径
venvPath="/home/ops/add_missing_room_detail/py36"
# python 项目的路径
projectPath="/home/ops/add_missing_room_detail/HotelGo2DelonixPmx"
# python 项目启动命令
CMD="python fix_missing_rates.py"

# 启动进程函数
start_process() {
  # 判断进程是否已经在运行,如果已经在运行则不需要重复启动
  start_pid=$(ps aux | grep "$CMD" | grep -v grep | awk '{print $2}')
  if [ -n "$start_pid" ]; then
    echo "The process is already running with PID:" $start_pid
    return 1
  fi

	# 激活python虚拟环境
  echo "activate python venv3  $venvPath"
  source $venvPath"/bin/activate"
  cd $projectPath
  # 后台运行执行命令,将日志输出到文件runoob.log
  nohup $CMD >runoob.log 2>&1 &
  start_pid=$!

  # 判断进程是否成功启动
  if [ -z "$start_pid" ]; then
    echo "Fail to start process"
    return 1
  else
    echo "The process has been started with PID:" $start_pid
    return 0
  fi
}

# 停止进程函数
stop_process() {
  # 根据进程名过滤出进程id,并结束进程
  start_pid=$(ps aux | grep "$CMD" | grep -v grep | awk '{print $2}')
  if [ -z "$start_pid" ]; then
    echo "No process to stop."
    return 1
  else
    kill -9 $start_pid
    echo "The process has been stopped with PID:" $start_pid
    return 0
  fi
}

# 根据传入参数执行对应的操作
case $1 in
start)
  start_process
  ;;
stop)
  stop_process
  ;;
*)
  echo "Usage: $0 {start|stop}"
  exit 1
  ;;
esac

使用

  1. 提示信息:

  2. 启动:

  3. 关闭:

相关推荐
Huangjin007_2 分钟前
【Linux 系统篇(十七)】进程(五) :进程切换、O(1) 调度算法
linux·运维·服务器
努力努力再努力wz2 分钟前
【Redis入门系列】:从 RESP 协议到 redis-plus-plus:Redis 客户端编程与 C++ 接口设计
开发语言·数据库·c++·redis·分布式·缓存·架构
weixin_464307633 分钟前
linux虚拟机断网
linux·运维·服务器
张铁霖11 分钟前
进阶玩法:AI项目中数据验证的实战经验分享
python
λqaq721 分钟前
Docker 容器入门基础:Cloud Studio 在线 Linux 环境上手
linux·运维·docker
Li Ming&21 分钟前
基于OpenCV+MediaPipe+PyGame的手势控制音乐播放器(Python实现)
人工智能·python·计算机视觉
en.en..24 分钟前
LVGL 普通函数指针与结构体函数指针原理
linux·windows·microsoft
byte轻骑兵25 分钟前
【BlueZ 】Adapter 模块:蓝牙适配器(主设备)的初始化与核心逻辑
linux·人工智能·bluez·电脑蓝牙·嵌入式蓝牙
流浪00134 分钟前
Linux系统篇27——通信(四):System V 消息队列 + 信号量:管道之后,Linux 还藏了哪两样 IPC
linux·运维
后台模板学习42 分钟前
Rust vs Python 在用户认证模块中的实现:底层
开发语言·python·rust