![](/img/trans.png)
[英]How to get shell output into python after it has run the bash command
[英]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.