我刚刚安装了 Ubuntu 16.04 LTS,发现当我运行
usr@server:~$ sudo service <servicename> restart
usr@server:~$
服务已重新启动(我可以使用 查看状态service <servicename> status
),但 shell 直接返回到命令行而没有出现预期的情况:
* Stopping <servicename> [ OK ]
* Starting <servicename> [ OK ]
答案1
您不应该期待这样的输出。
首先,Ubuntu 在早期版本中并没有这样做。Ubuntu 是一个新贵系统,仅存在了不到十年,而service
这些年来,Ubuntu 上的命令行为一直与您预期的不同。您可以service
在图像中看到命令的新贵行为如何让服务命令在 15.10 中打印输出?。
对于您来说,答案与去年使用 Ubuntu 15.10 版本的人的答案几乎相同:
您正在使用 Ubuntu 16.10 版,这是一个 systemd 操作系统。您的系统服务管理不再由 upstart 执行(或由您之前使用的任何非 Ubuntu 操作系统上的任何实用程序执行)。它由 systemd 执行。
命令service
可能相同……但 Debian/Ubuntuservice
命令是一个 shell 脚本,它会尝试自动检测 upstart 还是 systemd 是正在运行的系统服务管理器,并为 upstart 和 systemd 运行实际的本机服务管理命令。它为 upstart 和 systemd 执行两个几乎完全不同的代码路径。
upstart 的原生服务管理命令包括initctl start
、等等。这些命令运行时都会打印消息initctl stop
。initctl status
systemd 的原生服务管理命令包括systemctl start
、等。这些命令运行时不会打印任何输出systemctl stop
。systemctl status
进一步阅读
答案2
实际上你不需要 OK 输出。没有输出意味着 OK。当服务无法正常启动时,Ubuntu 会向你显示类似以下内容:
php5.6-fpm.service 的作业失败,因为控制进程退出并显示错误代码。有关详细信息,请参阅“systemctl status php5.6-fpm.service”和“journalctl -xe”。
在我的例子中,这个例子是我的 php-fpm.conf 上的错误配置导致服务无法启动。按照说明操作后,我找到了导致错误的原因。