![重启后自动启动nginx](https://linux22.com/image/1068734/%E9%87%8D%E5%90%AF%E5%90%8E%E8%87%AA%E5%8A%A8%E5%90%AF%E5%8A%A8nginx.png)
我正在使用 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 启动。
手动操作即可:
- 我重启了服务器
- 重启后,节点应用程序正在运行(crontab 启动永久进程)
- Nginx 有错误
- 我使用以下命令启动 nginx
service 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.