进一步阅读

进一步阅读
status -p $pidfile -l $lockfile $prog

此命令适用于 CentOS - /bin/sh shell。

/bin/bash但是当我尝试使用shell(或zsh也)在 Ubuntu 14.04 上运行相同的命令时,它会抛出错误,

status: invalid option: -p
Try `status --help' for more information.

我们如何status在 Ubuntu 上将 pidfile 位置参数传递给命令?

答案1

状态 -p $pidfile -l $lockfile $prog

这是RHEL/CentOS 6 上的status()shell 功能。它也称为/etc/rc.d/init.d/functionsstatusproc()Linux 从头开始世界。

这告诉我们,你做的事情是非常错误的。您将可在 System 5 脚本中使用的特殊 shell 帮助程序函数rc与普通的交互式 shell 外部命令混为一谈。您正在rcUbuntu 上编写 System 5 脚本。并且您正在使用 PID 文件和锁定文件。

  • 不要使用 PID 文件作为穷人的服务跟踪。 不要使用锁定文件穷人的服务也是环环相扣的。它们在 Ubuntu Linux 版本 14 和 15 上完全没有必要,它们分别有 upstart 和 systemd。他们不需要不稳定的 PID 文件和锁定文件。 systemd 和 upstart 都确保不会两次启动同一个服务,并且两者都正确跟踪服务进程的进程 ID,因为它们首先分叉了这些进程。这让我想到:
  • 不要rc在 Ubuntu Linux 上编写 System 5 脚本。在版本 14 上已经有了新贵;在版本 15 上,现在有了 systemd,就像在 CentOS 7、RHEL 7 和 Debian 8 上一样rc。很长一段时间以来,没有充分的理由在 Ubuntu Linux 上编写 System 5脚本。还有一个当然如果您重新使用 Ubuntu Linux,则不应该从那里开始。即使您从这里开始是因为您(错误地)尝试将 System 5rc脚本从 CentOS 引入:
  • 不要依赖status()shell 函数跨操作系统甚至同一操作系统的不同版本。如前所述,它在 LFS 中的名称不同。它不在 Fedora 2009 年的“新”LSB 支持功能中。在该功能中甚至没有强制的statusSystem 5rc脚本操作。Debian 政策手册首先,尽管 LSB 辅助 shell 函数库确实有一个(略有不同的)status_of_proc()辅助函数。

为 Ubuntu 版本 14 编写一个 upstart“作业文件”,或为 CentOS 7、RHEL 7、Debian 8 或 Ubuntu 15 编写一个 systemd“服务单元”。upstart 和 systemd 都提供服务状态命令:(initctl status使用一个简单的 shim,名为status)和systemctl status,分别。在工作文件或服务单位中支持他们你不需要做任何事

进一步阅读

答案2

CentOS 6.5 上的版本status是包中的 0.6.5 upstart。 Ubuntu 14.04 上的
版本status是 1.12.1,也来自包upstart

这些都不接受该-p选项。

Upstartstatus不允许您以任何方式指定 PIDFILE。您可以指定作业并提供要传递给脚本的 key=value 参数。其他命令行选项可以使用 查看status --help

在 CentOS 7 上没有status(至少在我的安装上没有),因为 CentOS 7 不再使用 Upstart(已切换到 systemd)。您可以尝试找出哪个软件包status在您的 CentOS ( yum whatprovides $(which status)) 上提供了该软件包,并查看您是否可以在 Ubuntu 上安装该软件包,从而获得替代状态(希望也有一个不同的、不冲突的名称)。

相关内容