重启后自动启动nginx

重启后自动启动nginx

我正在使用 crontab 在重启后启动一些服务。

这是我当前的 crontab:

@reboot root /etc/init.d/nginx reload
@reboot /usr/local/bin/forever start /var/www/rtc/index.js

它可以适用于forever,但是 nginx 从未启动。

我也尝试过:

@reboot /etc/init.d/nginx reload
@reboot sudo service nginx reload

有任何想法吗?

我的 nginx 配置如下:

server {
        listen 443 ssl;
        server_name www.example.com;

        ssl_certificate /var/wwwssl/example.pem;
        ssl_certificate_key /var/wwwssl/example.key.pem;

        location / {
                proxy_pass https://www.example.com:8443;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Host $host;
                proxy_cache_bypass $http_upgrade;
        }
}

编辑:

该解决方案也没有用

使用 systemd 插件执行此操作:

[Service]
Restart=always

将其作为文件放置/etc/systemd/system/nginx.service.d/override.conf(如果目录不存在,则创建目录)。您还可以使用systemctl edit nginx创建文件。

编辑:

服务已启用。

# systemctl is-enabled nginx
enabled

我还是不知道为什么 nginx 无法启动。

每次shutdown -r(我用它来测试重启)后我都会检查sudo service --status-all,发现 nginx 没有运行。

编辑

重启后,系统日志显示 nginx 出现一些错误:

nginx: [emerg] host not found in upstream "www.example.com" in /etc/nginx/sites-enabled/default:100
nginx: configuration file /etc/nginx/nginx.conf test failed
nginx.service: Control process exited, code=exited, status=1/FAILURE
nginx.service: Failed with result 'exit-code'.
Failed to start A high performance web server and a reverse proxy server.

编辑:

尝试添加解析器:

resolver IP valid=30s;

还是同样的问题

编辑

可能是因为启动顺序,nginx 在重启后无法启动?Nginx 必须由 root 启动。节点应用程序由 nodeuser 使用 crontab 启动。

手动操作即可:

  1. 我重启了服务器
  2. 重启后,节点应用程序正在运行(crontab 启动永久进程)
  3. Nginx 有错误
  4. 我使用以下命令启动 nginxservice nginx restart

我认为导致问题的原因是:

重启后,首先处理根进程。Nginx 尝试启动,但节点应用程序尚未启动,因此出现错误。但我该如何修复它?

我觉得顺序没什么区别。我删除了永久启动,重启后仍然出现同样的错误。

nginx -t:

在此处输入图片描述

答案1

罗曼:

sudo systemctl enable nginx

您可以尝试使用此命令将链接设置为 SysV 来初始化吗?

update-rc.d nginx defaults

为什么要设置 nginx 默认值?

When  run  with  the  defaults  option,  update-rc.d  makes links named
       /etc/rcrunlevel.d/[SK]NNname that point to the script /etc/init.d/name,
       using  runlevel  and  dependency information from the init.d script LSB
       comment header.

答案2

该解决方案还解释了此堆栈主题

proxy_pass我必须用 IP替换 nginx 配置中的域名:

proxy_pass https://<IP-OF-YOUR-SERVER>:8443;

相关内容