在 Ubuntu 上,通过 systemctl 来操作自己的程序
要让你的程序可以通过 systemctl start/restart/status/enable myapp
这样的命令来操作,你需要为它创建一个 systemd service unit 文件。以下是完整步骤,适用于 Ubuntu(使用 systemd 的版本):
✅ 步骤一:创建 systemd service 文件
假设你的程序叫 myapp
,并放在 /usr/local/bin/myapp
,可以按如下方式操作:
sudo vi /etc/systemd/system/myapp.service
内容模板如下:
[Unit]
Description=MyApp Service
After=network.target
[Service]
ExecStart=/usr/local/bin/myapp --config /etc/myapp/config.yaml
Restart=always
#User=www-data # 或你希望运行此程序的用户
#Environment=ENV_VAR_NAME=value # 可选环境变量
#WorkingDirectory=/usr/local/bin # 如果你有依赖工作路径的需求
[Install]
WantedBy=multi-user.target
说明:
ExecStart
:程序的执行路径Restart=always
:如果程序崩溃,会自动重启User=xxx
:指定以哪个用户运行Environment=...
:可添加多个WorkingDirectory
:程序启动前切换到的路径
✅ 步骤二:重新加载 systemd 配置
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
✅ 步骤三:启用并操作服务
sudo systemctl enable myapp # 开机启动
sudo systemctl start myapp # 启动服务
sudo systemctl restart myapp # 重启服务
sudo systemctl status myapp # 查看状态
sudo systemctl stop myapp # 停止服务
✅ 可选:查看日志输出
journalctl -u myapp.service -f
如果你的程序有输出(如 stdout/stderr),会通过 journalctl
查看。
✅ 进阶:如果你是以 Go 或 Python 写的程序
- 如果你的程序运行需要依赖某些目录或环境变量,不要忘记用
WorkingDirectory
和Environment
来配置。 - 如果你写的是 Python 脚本,则
ExecStart
可能需要写成ExecStart=/usr/bin/python3 /path/to/your/script.py
需要的话我可以帮你生成一个具体的 myapp.service
文件,直接贴出来也可以审查优化。