Amazon Linux 2 AMI无法通过Upstart启动程序求助
解决终端断开后Go程序持续运行的问题
看起来你遇到的核心问题是:当前系统默认不再使用Upstart(start/initctl命令找不到就是明证),而且你的配置文件也不完整。下面分两种方案帮你解决:
方案一:继续使用Upstart(不推荐,仅适合老版本系统)
现在大多数主流Linux发行版(比如Ubuntu 16.04+)已经弃用Upstart,改用systemd了。如果你坚持要用Upstart,得先安装它:
- 安装Upstart:
sudo apt update && sudo apt install upstart - 补全你的Upstart配置文件(保存到
/etc/init/myconf_file.conf,注意必须带.conf后缀):description "start and stop the go program 'my-project'" start on filesystem or runlevel [2345] stop on runlevel [!2345] env USER='ubuntu' env APP_DIR='/home/ubuntu/go/src/github.com/your-username/your-project' # 注意:Linux下Go编译的程序没有.exe后缀,这里要改成你的实际程序名 env APP_BIN='my-project' # 切换到指定用户和目录 setuid $USER chdir $APP_DIR # 启动程序并记录日志 exec ./$APP_BIN >> /var/log/my-project.log 2>&1 - 启动服务:
sudo start myconf_file
方案二:使用systemd(推荐,适配现代系统)
这是当前Linux系统的标准服务管理方式,稳定性和兼容性更好:
- 创建systemd服务文件:
sudo nano /etc/systemd/system/my-project.service - 写入以下配置(替换成你的实际路径):
[Unit] Description=Start and stop the Go program 'my-project' After=network.target # 确保网络就绪后再启动 [Service] User=ubuntu # 运行程序的用户 WorkingDirectory=/home/ubuntu/go/src/github.com/your-username/your-project # 程序所在目录 # 程序的绝对路径,避免环境变量问题 ExecStart=/home/ubuntu/go/src/github.com/your-username/your-project/my-project Restart=always # 程序崩溃或意外退出时自动重启 RestartSec=5 # 重启间隔5秒 # 日志输出配置 StandardOutput=append:/var/log/my-project.log StandardError=append:/var/log/my-project.log [Install] WantedBy=multi-user.target # 设置开机自启的目标级别 - 完成后执行以下命令:
- 重新加载systemd配置:
sudo systemctl daemon-reload - 启动服务:
sudo systemctl start my-project - 设置开机自启:
sudo systemctl enable my-project - 查看服务状态:
sudo systemctl status my-project - 实时查看日志:
sudo tail -f /var/log/my-project.log
- 重新加载systemd配置:
额外注意事项
- 确保你的Go程序有执行权限:
chmod +x /home/ubuntu/go/src/github.com/your-username/your-project/my-project - 提前创建日志文件并设置权限,避免写入失败:
sudo touch /var/log/my-project.log && sudo chown ubuntu:ubuntu /var/log/my-project.log - Linux下Go编译的程序默认没有
.exe后缀,记得把配置里的.exe去掉,否则会找不到程序。
内容的提问来源于stack exchange,提问作者HowToGo
相关产品推荐
相关产品推荐

