在 UBUNTU,service postgresql status
列出
Process: 18534 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 18534 (code=exited, status=0/SUCCESS)
但当我测试时sudo ps -ax | grep 18534
没有列出任何内容。
笔记
EDIT1 针对@DanielB 请求,但我需要一个简单的命令来显示任何 服务PID。
这里有一个垃圾场more /lib/systemd/system/postgresql.service
,
# systemd service for managing all PostgreSQL clusters on the system. This
# service is actually a systemd target, but we are using a service since
# targets cannot be reloaded.
[Unit]
Description=PostgreSQL RDBMS
[Service]
Type=oneshot
ExecStart=/bin/true
ExecReload=/bin/true
RemainAfterExit=on
[Install]
WantedBy=multi-user.target
编辑2
上面的 PostgreSQL 是我的本地主机服务器...现在我正在使用 UBUNTU 16 LTS 和 Postgresql 9.X 在“全新、干净、闪亮”的 DigitalOcean Droplet 进行测试...
root@myServer:~# service postgresql status
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Dom 2016-12-18 17:47:09 UTC; 2 weeks 4 days ago
Main PID: 8703 (code=exited, status=0/SUCCESS)
Tasks: 0
Memory: 0B
CPU: 0
CGroup: /system.slice/postgresql.service
Dez 18 17:47:09 myServer systemd[1]: Starting PostgreSQL RDBMS...
Dez 18 17:47:09 myServer systemd[1]: Started PostgreSQL RDBMS.
Dez 18 17:47:14 myServer systemd[1]: Started PostgreSQL RDBMS.
root@myServer:~# sudo ps -ax | grep 8703
3702 pts/0 S+ 0:00 grep --color=auto 8703
root@myServer:~# sudo service postgresql restart
root@myServer:~# sudo ps -ax | grep 8703
3760 pts/0 S+ 0:00 grep --color=auto 8703
root@myServer:~# service postgresql status
● postgresql.service - PostgreSQL RDBMS
Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
Active: active (exited) since Sex 2017-01-06 16:06:07 UTC; 8s ago
Process: 3755 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 3755 (code=exited, status=0/SUCCESS)
Jan 06 16:06:07 myServer systemd[1]: Starting PostgreSQL RDBMS...
Jan 06 16:06:07 myServer systemd[1]: Started PostgreSQL RDBMS.
sudo ps -ax | grep 3755
3780 pts/0 S+ 0:00 grep --color=auto 3755
答案1
没有,因为正如您从单元内容中看到的那样,postgresql.service
它实际上并没有启动任何守护进程。它仅作为“父”服务存在,用于将各种实例组合在一起[email protected]
(即一次重新加载所有实例)。请看一下:
systemctl status postgresql@\*.service
答案2
这里的任何地方似乎都没有显示该服务的 PID:
Process: 18534 ExecStart=/bin/true (code=exited, status=0/SUCCESS) Main PID: 18534 (code=exited, status=0/SUCCESS)
我之所以这么说,是因为这条消息谈到了退出代码,而这对于正在运行的进程来说毫无意义。只有终止的进程才有退出代码。
如果 postgres 服务正在运行,在 GNU/Linux 系统中,您可以在输出中找到其 PID sudo netstat -ntlp | grep posgres
,例如:
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 3738/postgres
在这种输出中,3738 是 PID。
附注:要通过 PID 验证进程,ps -ax | grep the-pid
最好执行而不是 运行ps -p the-pid
。