有什么区别? sudo重启

时间:2014-10-11 08:05:07

标签: linux apache

有什么区别:

sudo /etc/init.d/apache2 restart

sudo service apache2 restart

我尝试了第一个,并且它没有应用我的更改,而

sudo service apache2 restart

确实接受了我的改变。

2 个答案:

答案 0 :(得分:2)

以下是您运行sudo /etc/init.d/apache2 restart时实际发生的事情:

if ! $APACHE2CTL configtest > /dev/null 2>&1; then
    $APACHE2CTL configtest || true
    log_end_msg 1
    exit 1
fi
if check_htcacheclean ; then
        log_daemon_msg "Restarting web server" "htcacheclean"
        stop_htcacheclean
        log_progress_msg apache2
else
        log_daemon_msg "Restarting web server" "apache2"
fi
PID=$(pidof_apache) || true
if ! apache_wait_stop; then
        log_end_msg 1 || true
fi
if $APACHE2CTL start; then
        if check_htcacheclean ; then
                start_htcacheclean || log_end_msg 1
        fi
        log_end_msg 0
else
        log_end_msg 1
fi

正如你所看到的;首先运行配置测试,如果成功,则服务器停止然后启动。

我发现如果正确保存并且有效,我很难相信运行此命令不会应用您的更改。我只使用这个命令而且从未遇到过这个问题。

/usr/bin/service被描述为:

# A convenient wrapper for the /etc/init.d init scripts.

它执行以下操作:

SERVICEDIR="/etc/init.d"

# Otherwise, use the traditional sysvinit
if [ -x "${SERVICEDIR}/${SERVICE}" ]; then
   exec env -i LANG="$LANG" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE" ${ACTION} ${OPTIONS}
else
   echo "${SERVICE}: unrecognized service" >&2
   exit 1
fi

因此命令基本相同,sudo service apache2 restart只是sudo /etc/init.d/apache2 restart的包装。

您也可以使用sudo /etc/init.d/apache2 reload,这会重新加载配置而无需重新启动服务器。这只适用于您更改了配置,它不会加载您已启用的模块,因为您需要重新启动Apache。

编辑:此代码来自Debian系统。

答案 1 :(得分:0)

通常,这两个命令是否相同取决于您的Linux发行版。

第一个需要存在传统的SysV风格的init脚本。直到几年前,这实际上是控制服务的唯一方法,service脚本只是一个基本上添加了init脚本路径的简单包装器。

目前,许多Linux发行版已转向其他服务管理系统,例如upstartsystemd。因此,service包装器也可以使用这些系统,提供一定程度的兼容性。

底线:根据您的Linux发行版的具体情况,/etc/init.d/apache2可能根本不存在,它可能只使用service本身,或者根本不执行任何操作。例如,我的Mageia Linix系统使用systemd服务文件启动Apache,并且根本没有SysV init脚本。

通常情况下,使用service <service> <command>...会更好。