这两个 Linux 服务器命令有区别吗?

这两个 Linux 服务器命令有区别吗?

启动、重新启动 apache 服务器时以下命令有何区别?

sudo service apache2 restart

sudo service apache2 stop
sudo service apache2 start

sudo systemctl restart apache2

sudo systemctl stop apache2
sudo systemctl start apache2

我只是通过使用 LAMP 堆栈来学习一些有关 Linux 服务器的知识,但我想知道为什么某些指南使用一种语法而其他指南使用另一种语法。

答案1

我只是通过使用 LAMP 堆栈来学习一些有关 Linux 服务器的知识,但我想知道为什么某些指南使用一种语法而其他指南使用另一种语法。

使用我的 rlm 许可证管理器的示例文件/etc/init.d,该文件中的相关代码与启动、停止、重新启动和状态相关:

status() {
    pid=`_getpid ${RLM_ROOT}/rlm`
    if [ -z "$pid" ]; then
        echo "rlm is stopped"
        return 3
    fi
    echo "rlm (pid $pid) is running..."
    return 0
}

restart() {
    stop
    start
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status
        ;;
    restart)
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart}"
        exit 1
esac

正如您所看到的,restart这只是一个调用 stop 然后 start 的函数调用。所以这就是全部restart,只不过是先调用停止然后再开始。

init.d 或 systemctl 文件实际上可以将重新启动定义为与我的示例不同且更加复杂吗? 是的,您必须亲自查看代码才能真正了解。但很可能它们都与我上面发布的内容非常相似,包括您的 apache 文件,关于启动 |停止|重启 |地位。

在您的问题的上下文中,如果您想停止并启动 apache2 服务,那么完成此操作所需的最少输入量将service apache2 restart与手动执行两个单独的命令首先停止然后启动相反。但无论哪种方式,你都会完成同样的事情。另请注意,如果您这样做restart,则服务将在停止后立即尝试启动,无论停止是否成功;这可能是好是坏,具体取决于您正在做什么或调试。有时,更有用的做法是先执行 a service whatever stop,然后在执行其他操作之前让它停止很长时间,然后再手动发出后续service whatever start.

初始化文件旧的Linux方式围绕service,现在被替换为系统linux 和systemctl语法结构。但service whatever <start|stop|restart|status仍然受支持,并将别名为systemctl <start|stop|restart|status whatever.所以在现代systemd linux系统上使用servicevs没有什么区别。systemctl如果您尝试在旧的 init.d 类型的 Linux 系统(例如 redhat5)上使用systemctl,由于显而易见的原因,它会简单地出现“找不到命令”的情况。您可以阅读解释 initd 与 systemd 的网络文章。

使用service whatever <start|stop|status|restart>文档中的语法以及在命令行中键入它仍然是完全有效且正确的。对于文档和指南,它以最少的字符表达了要点,并且由于它几乎直接别名为 systemctl (它们是服务),因此在我看来,继续使用该遗产更具人类可读性初始化任何文档中的服务语法。

相关内容