我有几个服务器,每个服务器都有一个运行程序的“屏幕”。通过这种方式,我可以在任何给定的时间内输入并监控他们的外出。
问题是,我经常不得不进入屏幕,登录屏幕,控制+ c进程,然后重新启动它。
我想编写一个bash脚本来为我的每台服务器执行此操作,除了control + c位之外,我想我知道该怎么做。
ssh ubuntu@ipaddress
screen -dr that_one_screen
#control+c somehow
restart_process
有人可以帮帮我吗?
答案 0 :(得分:3)
而不是ctrl-C,只需使用“kill”杀死进程。
跟进(重新:PID确定):
一般来说,在Linux上尝试类似:
ps -e | grep <your process name> | awk {'print $1'}
以“ps -e”开头,以获得土地的位置,并了解您可以过滤的内容。
答案 1 :(得分:1)
我可以实现此问题的解决方案的另一种方法如下:
在我希望控制的每个系统上,我会放置一个执行两项操作的bash脚本:(1)终止正在运行的进程,(2)重新启动它。然后我可以在我的'master'系统上有第二个bash脚本,它只需通过ssh命令调用这个脚本。例如:
脚本1:recycle_process.sh (放在我希望控制的每个系统上)
#!/bin/bash
pid=`pgrep 'my_process_name'`
kill $pid
# Launch 'my_process_name' (as a background process!)
脚本2:do_recycle.sh (放置在主控制器系统上)
#!/bin/bash
_host=$1
if(-z $_host) {
echo "Gimme a host name to connect to!";
exit(1);
}
ssh root@$_host screen -dm /path/to/recycle_process.sh
现在您所要做的就是从主系统的命令行运行do_recycle.sh myhostname
,并且(我相信)您的问题将得到解决。在这种情况下,我认为您不需要保持屏幕会话活着。该过程始终在后台运行。那就是说,我不确定你是如何设置的;您可能需要更改上面脚本2中的屏幕行以使用您的环境。