需求
经常会使用一些命令来杀进程, 后台启动, 检查进程是否正在执行, 重复执行复杂的命令行.
传统的解决方案, 要不每次都手动输入很长的命令行, 要不每个项目都拷贝一遍三四个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.py
的setup
函数中添加参数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