在Linux系统中检查进程是否正在运行的最佳实践是什么?

3

我使用下面的脚本安装了Chef服务器。我对Linux比较陌生,正在尝试学习如何设置Chef服务器。我运行了chef.io提供的命令,脚本成功了。我真的不确定该如何检查进程是否在运行中。对于Linux而言,如何查看进程是否在运行中是最佳实践?有哪些方法可以找出我需要知道的信息?

        #!/bin/bash \
echo "Do your provisioning here" \
sudo wget https://packages.chef.io/files/stable/chef-server/12.14.0/el/7/chef-server-core-12.14.0-1.el7.x86_64.rpm \
sudo chmod a+x chef-server-core-12.14.0-1.el7.x86_64.rpm
sudo rpm -Uvh ./chef-server-core-12.14.0-1.el7.x86_64.rpm
sudo chef-server-ctl reconfigure \
sudo openssl rsa -in private.pem -outform PEM -pubout -out ~/.ssh/chef-server.pem \
sudo chef-server-ctl user-create admin 'admin' 'email' 'password' --filename ~/.ssh/chef-server.pem \
sudo openssl rsa -in private.pem -outform PEM -pubout -out ~/.ssh/chef-server-validator.pem \
sudo chef-server-ctl org-create short_name 'idevops' --association_user admin --filename ~/.ssh/chef-server-validator.pem \
sudo openssl rsa -in private.pem -outform PEM -pubout -out ~/.ssh/chef-coffee-server-validator.pem \
sudo chef-server-ctl org-create 4thcoffee 'iDevops 4th Coffee' --association_user admin --filename ~/.ssh/chef-coffee-server-validator.pem \
sudo chef-server-ctl install chef-manage \
sudo chef-server-ctl reconfigure \
sudo chef-manage-ctl reconfigure \
sudo chef-server-ctl install opscode-push-jobs-server \
sudo chef-server-ctl reconfigure \
sudo opscode-push-jobs-server-ctl reconfigure \
sudo chef-server-ctl install opscode-reporting \
sudo chef-server-ctl reconfigure \
sudo opscode-reporting-ctl reconfigure \
sudo chef-server-ctl install PACKAGE_NAME --path /path/to/package/directory \
sudo chef-server-ctl install chef-manage --path /root/packages \
sudo mkdir /etc/opscode && sudo touch /etc/opscode/chef-server.rb \
sudo echo "license['nodes'] = 0" >> /etc/opscode/chef-server.rb \
sudo chef-server-ctl reconfigure

我对Chef不熟悉,但对于大多数服务器,您应该能够通过某种请求查询它们。 - Mad Physicist
1
最好不要在bash脚本中这样做,而是使用chef-ingredients cookbook。 - coderanger
4个回答

2

好的,你可以在网上找到一些地方,首先要做的是检查进程是否正在运行。

ps aux | grep 进程名称

然后,如果它正在运行但仍然无法访问它。您需要使用netstat命令,并使用端口进行过滤。

net stat -anp | grep portnumber

你需要查看服务是否在它应该监听的端口上运行。如果服务正在监听,则意味着该端口正在等待通信请求。这意味着该应用程序已经启动并且正在监听该端口,或者该端口已被另一个应用程序占用,因此未能启动。
通常情况下,您需要查看日志文件。您可以使用"tail -f -n 100 /path/to/log/file"命令来实现。其中,"-n"表示要显示的行数,"-f"表示持续跟踪文件,以便您可以实时查看日志内容。如果您不指定任何参数,则只会将最后的100行日志打印到屏幕上。

1

如果您只想手动检查它,请登录服务器并运行:

ps auxw | grep YOUR_PROCESS_NAME

1
首先,我不会在确认命令可用之前从脚本中运行它们。你可能没有运行该服务:
    sudo service chef-server status #would be a good place to start 

要检查Linux上是否正在运行进程,我建议从以下内容开始:
    ps aux | grep <part of the process name>
    ps aux | grep chef

如果您不喜欢辅助程序的输出,也可以使用“-ef”,例如:
    ps -ef | grep <part of the process name>
    ps -ef | grep chef

如果您知道进程应该打开哪个端口,可以使用netstat命令:
    netstat -anp | grep <port number>

例子:寻找正在运行的nginx或apache服务器:

    netstat -anp | grep 80

观看日志时,我喜欢使用tail命令:

    tail -f /var/log/<name of application folder/<name of log>

例子:观察nginx日志:
    tail -f /var/log/nginx/nginx.log

有时候观察系统日志也是非常有帮助的:
    tail -f -n 100 /var/log/syslog

如果要查找来自其他机器的传入连接:

    sudo tcpdump -vvv -i any port <port number>

0

在你发布的输出中有一个相对较大的提示(例如chef-server-ctl status),

The status subcommand is used to show the status of all services available 
to the Chef server. The results will vary based on the configuration of a 
given server.

或者,chef-server-ctl status 服务名称

where SERVICE_NAME represents the name of any service that is listed after 
running the service-list subcommand.
请参考chef-server-ctl (executable)页面底部的start子命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接