启动时启动Nginx


11

我能够安装并运行nginx和passenger,但是无论何时重新启动服务器我都无法启动nginx。要启动nginx进程,只需输入sudo / opt / nginx / sbin / nginx即可。据我了解,我在/etc/init.d中放入ubuntu hardy的所有内容都会执行。有人知道模拟该命令行调用的命令吗?

须藤/ opt / nginx / sbin / nginx


如果您通过apt-get install nginx安装nginx,则它会在启动时“自动”启动(但最初不会自动启动,很奇怪...)
rogerdpack 2013年

Answers:


11

感谢您提供的信息,如果有人想要分步说明。转到/etc/init.d并运行sudo nano nginx-passenger.sh,然后粘贴以下代码:

#!/bin/bash
# this script starts the nginx process attached to passenger
sudo /opt/nginx/sbin/nginx

保存并退出。通过键入使文件可执行sudo chmod +x /etc/init.d/nginx-passenger.sh。您可以通过键入sudo /etc/init.d/nginx-passenger.sh以下命令来测试脚本是否正常运行,它将运行脚本中的所有代码。在继续之前,请验证它是否启动了nginx。

然后sudo update-rc.d nginx-passenger.sh defaults仍然在/etc/init.d目录中运行。所有这些就绪后,重新启动服务器,现在应该在启动时自动生成ngnix


感谢您的直接指示。这就是StackExchange的目的。
瑞安

10

/etc/init.d只是启动脚本所在的位置。但是拥有脚本不会自动执行任何操作。

初始化系统使用/etc/rc#.d目录中的符号链接到/etc/init.d文件夹中的脚本。符号链接的名称必须以S开头(带有开始选项的情况下运行脚本),以K开头以运行停止选项,后跟优先级编号和脚本名称。

有关更多信息,请参见以下内容
/etc/init.d/README
/etc/rc1.d/README
/etc/rc2.d/README

或者,您可以将要运行的命令放在/etc/rc.local脚本中,该脚本在系统启动并完成执行/etc/rc2.d/文件夹中的所有脚本之后运行。


1
顺便说一句,/ etc / init.d / README文件指示您使用update-rc.d命令在/etc/rc?.d中创建符号链接,因此上述答案仅让您知道该命令在做什么。您可以运行man update-rc.d以获取有关update-rc.d命令的更多信息。
3dinfluence

看起来,update-rc.d命令手册页建议您使用sysv-rc-conf或bum来管理在各种运行级别下运行的初始化脚本。猜猜我会在/etc/init.d/README中提交一个错误
3dinfluence

看起来它已在下一Ubuntu版本中得到纠正。update-rc.d手册页不再建议sysv-rc-conf或bum。
3dinfluence

5

要在启动时启动nginx :( sudo systemctl enable nginx不会立即启动)

要启动nginx: sudo system start nginx


啊,现代的答案(就是2019年的现代)。欢迎来到网站ButterHub :)
kubanczyk

谢谢@kubanczyk :)
Ben B

2

我假设您已经安装了nginx

如果您正在运行nginx,请使用以下命令停止该过程:

  • sudo kill猫/usr/local/nginx/logs/nginx.pid

初始化脚本

下面显示的脚本来自Ubuntu 10.04安装,并经过修改以考虑到我们自定义的nginx安装。请创建脚本:

sudo nano /etc/init.d/nginx

在空白文件内放置以下内容:

#! /bin/sh

### BEGIN INIT INFO
# Provides:          nginx
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the nginx web server
# Description:       starts nginx using start-stop-daemon
### END INIT INFO


PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/local/sbin/nginx
NAME=nginx
DESC=nginx

test -x $DAEMON || exit 0

# Include nginx defaults if available
if [ -f /etc/default/nginx ] ; then
        . /etc/default/nginx
fi

set -e

case "$1" in
  start)
        echo -n "Starting $DESC: "
        start-stop-daemon --start --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
                --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  stop)
        echo -n "Stopping $DESC: "
        start-stop-daemon --stop --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
                --exec $DAEMON
        echo "$NAME."
        ;;
  restart|force-reload)
        echo -n "Restarting $DESC: "
        start-stop-daemon --stop --quiet --pidfile \
                /usr/local/nginx/logs/$NAME.pid --exec $DAEMON
        sleep 1
        start-stop-daemon --start --quiet --pidfile \
                /usr/local/nginx/logs/$NAME.pid --exec $DAEMON -- $DAEMON_OPTS
        echo "$NAME."
        ;;
  reload)
      echo -n "Reloading $DESC configuration: "
      start-stop-daemon --stop --signal HUP --quiet --pidfile /usr/local/nginx/logs/$NAME.pid \
          --exec $DAEMON
      echo "$NAME."
      ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac

exit 0

执行 由于初始化文件是Shell脚本,因此它需要具有可执行权限。

我们将它们设置为:

sudo chmod +x /etc/init.d/nginx

update-rc 现在我们已经准备好基本脚本,我们需要将其添加到默认运行级别:

sudo /usr/sbin/update-rc.d -f nginx defaults 

输出将类似于以下内容:

sudo /usr/sbin/update-rc.d -f nginx defaults
 Adding system startup for /etc/init.d/nginx ...
   /etc/rc0.d/K20nginx -> ../init.d/nginx
   /etc/rc1.d/K20nginx -> ../init.d/nginx
   /etc/rc6.d/K20nginx -> ../init.d/nginx
   /etc/rc2.d/S20nginx -> ../init.d/nginx
   /etc/rc3.d/S20nginx -> ../init.d/nginx
   /etc/rc4.d/S20nginx -> ../init.d/nginx
   /etc/rc5.d/S20nginx -> ../init.d/nginx

现在,我们可以像启动其他服务一样启动,停止和重新启动nginx:

sudo /etc/init.d/nginx start
...
sudo /etc/init.d/nginx stop
...
sudo /etc/init.d/nginx restart

该脚本还将在重新启动时被调用,因此nginx将自动启动。



1
我发现必须sudo systemctl enable nginx/etc/init.d目录内部使用ubuntu 17.10 。
Erik



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.