linux - 如何通过 rc.local 重启 Linux 中的后台进程?
问题描述
我ASP.NET Core APIs
的Linux
. 我有两个environments
- PROD - https://somesite.com - UI 和它的 API 端点 - https://somesite.com/api
- DEV - https://somesite-dev.com - UI 和它的 API 端点 - https://somesite-dev.com/api
两个 UI 都由nginx
on提供服务,port 80 and 443
并且它们各自的 APInginx reverse proxy
用于移植5000
,1880
因为它们.NET Core API
在同一个AWS EC2 instance
现在我有了重新启动这两个.NET Core APIs
- DEV 和 PROD -所需的所有命令rc.local
以下是我的rc.local
内容:
#!/bin/sh
REM This script will be executed *after* all the other init scripts.
REM You can put your own initialization stuff in here if you don't
REM want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
sudo service nginx stop
REM DEV -------------------------------------------
REM Removing previous Error and Output files.
sudo rm /etc/somesite/somesite_dev/Output2.out
sudo rm /etc/somesite/somesite_dev/Error2.err
REM Starting the BG process.
sudo nohup /etc/somesite/somesite_dev/somesite_core_api_dev >
/etc/somesite/somesite_dev/Output2.out 2> /etc/somesite/somesite_dev/Error2.err < /dev/null &
REM Changing Error and Output files permission and Ownership.
sudo chmod 777 /etc/somesite/somesite_dev/Output2.out
sudo chmod 777 /etc/somesite/somesite_dev/Error2.err
sudo chown ec2-user:ec2-user /etc/somesite/somesite_dev/Output2.out
sudo chown ec2-user:ec2-user /etc/somesite/somesite_dev/Error2.err
REM ----------------------------------------------
REM PROD -----------------------------------------
REM Removing previous Error and Output files.
sudo rm /etc/somesite/somesite_prod/Output3.out
sudo rm /etc/somesite/somesite_prod/Error3.err
REM Starting the BG process.
sudo nohup /etc/somesite/somesite_prod/somesite_core_api_prod >
/etc/somesite/somesite_prod/Output3.out 2>
/etc/somesite/somesite_prod/Error3.err < /dev/null &
REM Changing Error and Output files permission and Ownership.
sudo chmod 777 /etc/somesite/somesite_prod/Output3.out
sudo chmod 777 /etc/somesite/somesite_prod/Error3.err
sudo chown ec2-user:ec2-user /etc/somesite/somesite_prod/Output3.out
sudo chown ec2-user:ec2-user /etc/somesite/somesite_prod/Error3.err
REM ----------------------------------------------
REM Force Stoping and Starting nginx
sudo service nginx start
当系统重新启动时,我看到 API 作为 BG 进程运行,但我得到了400 Bad request
但是当我使用文件中的相同命令从终端启动相同的 API 时,即
对于产品 -sudo nohup /etc/somesite/somesite_prod/somesite_core_api_prod > /etc/somesite/somesite_prod/Output3.out 2> /etc/somesite/somesite_prod/Error3.err < /dev/null &
对于开发 -sudo nohup /etc/somesite/somesite_dev/somesite_core_api_dev > /etc/somesite/somesite_dev/Output2.out 2> /etc/somesite/somesite_dev/Error2.err < /dev/null &
我得到的 API 工作正常200
如果有人可以提供帮助,我不确定我在这里缺少什么。
谢谢
解决方案
REM 是 DOS 的注释命令。在 Linux 中,您以 # 开始注释。在 Linux 中,REM 是一个未知命令,会导致脚本中止。您是否在 syslog 中查看过错误?
rc.local 以 root 身份运行。这些sudo
s 都不是必需的。并且 rc.local 不在终端中运行,因此nohup
不需要这些行。
不要使文本文件可执行。执行 chmod 644,而不是 chmod 777。
无需删除以前的日志文件。您的重定向将覆盖它们。另外,如果文件不存在,您的“rm”将失败。
不要以这种方式启动 nginx。我不知道您使用的是什么发行版,但是有明确定义的方式可以说“nginx 必须在启动时启动”。这就是你应该用来启动 somesite_core_api_dev 的东西,但我们可以放手。
推荐阅读
- typescript - 约束成员只接受扩展或实现其他类型的类型(不是实例)[TypeScript]
- amazon-web-services - 使用 AWS 安排对 IIS 的请求
- java - 确定字符是否为有效十六进制数字的方法?
- go - 如何让golang的Logrus通过多个文件共享同一个配置?
- java - 处理在 Java/Selenium 中停止处理的浏览器弹出窗口
- javascript - 将 JQuery Each 转换为 ES6/7 循环
- c# - C#如何为不同的图像大小获取相同的坐标
- python - 将数据框折叠到 NaN 值上
- c# - Firebase 云消息传递和 Azure 通知中心错误
- sql - 在不考虑实际天数的情况下查找中间的月份