繁体   English   中英

如何标记在 bash shell 中运行的 python 命令

[英]How to tag to a python command run in a bash shell

是否可以标记从命令行运行的 python 程序?

上下文:该命令将在后台以nohup运行,并将在午夜通过cron被杀死并重新启动。 我的意图是将 pipe ps放入egrep以获取所述标签,获取pid并在重新启动之前kill -9

最小、完整和可验证的示例

启动 python web 服务器:

$ nohup python -m http.server 8888 &

为命令添加标签。 请注意, -tag只是我在工作中的想象。这就是我想要的:

$ nohup python -m http.server 8888 & -tag "ced72ca0-cd19-11ea-87d0-0242ac130003"

grep用于标签:

$ ps aux | egrep "ced72ca0-cd19-11ea-87d0-0242ac130003"

...从中获取 pid,然后kill -9

因为你说你想在晚上通过孤立的cron作业杀死进程,所以我猜$! 链接问题中的基于解决方案(例如( 如何获取进程 ID 以终止 nohup 进程? ))对您来说是没有选择的。

为了识别您的 HTTP 服务器进程,您的想法是使用唯一 ID“标记”它们,以便 cron 作业可以找到它们。
在您的特定情况下,您可以做的是利用监听 TCP sockets 在您的给定机器上是唯一的这一事实,并通过netstat检索关联的 pid。

bash 脚本如下:

#!/bin/bash
port=${1:-"8888"}
IP=${2:-"0.0.0.0"}

pid=`netstat -antp  2>/dev/null | grep -E "^(\S+\s+){3}$IP:$port\s+\S+\s+LISTEN" | sed -E 's/ˆ(\S+\s+){6}([0-9]+).*$/\2/'`

[[ -n "$pid" ]] && kill -TERM $pid

...您使用IP 参数化并通过您的cron作业进行移植。

您可以将代码放入名为ced72ca0-cd19-11ea-87d0-0242ac130003文件中,

#!/bin/bash 

python -m http.server

设置为可执行

chmod +x ced72ca0-cd19-11ea-87d0-0242ac130003

运行

nohup ced72ca0-cd19-11ea-87d0-0242ac130003 &

然后你可以杀死它

pkill ced72ca0-cd19-11ea-87d0-0242ac130003

甚至只使用文件名的开头

pkill ced

编辑:

因为新脚本没有得到任何 arguments 所以你可以使用任何参数运行它 - 即。 一些标签/单词

nohup ced72ca0-cd19-11ea-87d0-0242ac130003 hello_world &

然后你可以使用-f杀死它

pkill -f hello_world

甚至使用部分单词

pkill -f hello

pkill -f world

这样您甚至可以为脚本使用普通名称并添加tag

nohup my_script ced72ca0-cd19-11ea-87d0-0242ac130003 &

并用-f杀死

pkill -f ced72ca0-cd19-11ea-87d0-0242ac130003

或仅使用单词的一部分

pkill -f ced

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM