在 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 写的程序

  • 如果你的程序运行需要依赖某些目录或环境变量,不要忘记用 WorkingDirectoryEnvironment 来配置。
  • 如果你写的是 Python 脚本,则 ExecStart 可能需要写成 ExecStart=/usr/bin/python3 /path/to/your/script.py

需要的话我可以帮你生成一个具体的 myapp.service 文件,直接贴出来也可以审查优化。

posted @ 2025-08-04 12:01  江南烟雨梦  阅读(34)  评论(0)    收藏  举报