阿章专用脚本跨项目使用

需求

经常会使用一些命令来杀进程, 后台启动, 检查进程是否正在执行, 重复执行复杂的命令行.

传统的解决方案, 要不每次都手动输入很长的命令行, 要不每个项目都拷贝一遍三四个sh脚本文件, 在根目录下会堆叠很多文件.

可以打包成自己用的命令库, 使用pip来云安装, 跨项目使用. 不用再拷贝, 节约时间.

Let’s Go!!!!

安装

使用pip安装最新版, 此feature要求python_common_tools版本在2.0.7或以上

 pip install python_common_tools

强制更新可以使用

pip install python_common_tools  -i  https://pypi.python.org/simple/ -U

项目兼容python3.4+

使用

安装之后就有了几个命令 这些命令在安装python_common_tools的时候被自动添加到了PATH环境变量当中. 输入az然后按Tab会自动提示. 以az_开头的都是阿章自用的脚本.

举例:

后台启动程序

az_nohup_start.sh python worker.py

根据命令含有的字符串杀进程

# 杀脚本
az_kill.sh "python worker.py"
# 杀web
az_kill.sh "web:app"

检查程序是否正在运行

az_ps_check.sh "web:app"
az_ps_check.sh "python worker.py"

原理

阿章自用的一些python脚本都放在了项目python_common_tools里,主要是一些python的小工具. 这次是添加的shell脚本. 利用setup.py在依赖安装的时候被执行, 所以在项目目录中添加了一个bin目录, 专门放一些shell脚本

然后在项目的setup.pysetup函数中添加参数scripts

setup(
  # 个人shell工具
    scripts=['python_common_tools/bin/az_kill.sh', "python_common_tools/bin/az_nohup_start.sh",
             "python_common_tools/bin/az_ps_check.sh"],
  }

这样依赖被安装的时候,pip会自动把这些脚本添加到PATH当中. 如果使用python虚拟环境安装的, 这些shell脚本就会存在在env/bin下面. 非常方便

源码

az_kill.sh

#!/usr/bin/env bash

app_name=$1
help="阿章专用脚本:杀进程:$app_name"

# 绿色输出提示
echo -e "\033[32m $help \033[0m"
ps -ef|grep "$app_name" |grep -v "grep"| awk '{print $2}'| xargs kill

az_nohup_start.sh

#!/usr/bin/env bash

proc=$@

help="阿章专用脚本:后台启动任务:$proc"

# 绿色输出提示
echo -e "\033[32m $help \033[0m"

# 将所有命令中的空格替换成_
# shell字符串替换用法  
# 单个替换${variable/before/after}  
# 全部替换 ${variable//before/after}
proc_no_blank=${proc//' '/'_'}
nohup $proc > "nohup.$proc_no_blank.out" 2>&1 &

az_ps_check.sh

#!/usr/bin/env bash

app_name=$1


help="阿章专用脚本:进程检查:$app_name"

# 绿色输出提示
echo -e "\033[32m $help \033[0m"
ps -ef|grep "$app_name"|grep -v grep