【问题标题】:How to remotely start and stop a service by Port number?如何通过端口号远程启动和停止服务?
【发布时间】:2017-05-22 01:22:48
【问题描述】:

我有一个仅包含 IP 地址和端口号的文件。我知道如何通过名称启动服务,但如何通过端口号启动和停止服务?

for port in $(cat /home/asd/iplog.txt); do
    service /etc/init.d/$port | cut -d\: -f2 start
done

这里是 iplog.txt 输出:

192.168.1.2:21
192.168.2.25:80
192.168.5.230:25

以及脚本的输出:

/etc/init.d/192.168.1.2:21: unrecognized service
cut: start: no such file or directory
/etc/init.d/192.168.2.25:80: unrecognized service
cut: start: no such file or directory

现在我有两个问题:

  • 如何通过端口号启动和停止服务?
  • 如何远程操作?

由于我不熟悉 shell 脚本,我真的需要你的帮助。

【问题讨论】:

  • 我认为,这种方法本质上是有缺陷的:对于任何合理的系统,服务应该是已知的,有时服务应该按一定的顺序启动或停止,等等。利用一些编排解决方案,例如,Salt,用于管理您的服务。

标签: bash shell command-line scripting pipe


【解决方案1】:

如何通过端口号查找服务的 PID/命令?

你可以杀死它/他们来停止服务。但这不是最好的方法。

#lsof-i :22
Command   PID USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
sshd    14543 root    3u  IPv4 4132251      0t0  TCP *:ssh (LISTEN)
sshd    14543 root    4u  IPv6 4132253      0t0  TCP *:ssh (LISTEN)
#ps 14543
PID TTY      STAT   TIME COMMAND
14543 ?        Ss     0:00 /usr/sbin/sshd

如何远程操作?

ssh user@remote 'your command to stop service'

【讨论】:

  • "lsof -i :port" 仅显示服务是否正在运行。它没有启动或停止服务吗?
  • @RAZhamraz 对。如果服务正在运行,它会返回 PID。使用此 PID,您可以找到命令行。然后根据需要启动或停止它。例如。 ps -p 1453 -o comm= 它返回“sshd”
  • @RAZHamraz 正如 Roman Susi 所提到的,您最好确定哪些服务在这些端口上侦听,以及检查其状态/启动/停止的正确命令是什么。