返回> 网站首页 

linux程序改成 systemd 服务

yoours2026-10-19 19:45:28 阅读 110

简介一边听听音乐,一边写写文章。

1. 程序用 printf 打日志到终端

systemd 会自动把 stdout/stderr 收到 journal 里,使用命令 journalctl -u 服务名 -f 查看


2. 程序用相对路径读配置文件

在 .service 里加 WorkingDirectory=/opt/myapp 就行


3. 推荐的服务写法

[Unit]

Description=My App

After=network.target


#网络在线后启动

#After=network-online.target

#Wants=network-online.target


[Service]

Type=simple

WorkingDirectory=/opt/myapp

ExecStart=/opt/myapp/myapp

Restart=on-failure

RestartSec=5

StandardOutput=journal

StandardError=journal


#如果 300 秒内连续崩溃 5 次,systemd 会停止重启并标记为失败,避免死循环拖垮系统。

#StartLimitIntervalSec=300

#StartLimitBurst=5


#日志长期保留

#StandardOutput=append:/data/myapp/app.log

#StandardError=append:/data/myapp/app.log


#指定用户、组运行

#User=myapp

#Group=myapp


[Install]

WantedBy=multi-user.target


注意:

    1. ExecStart 必须写绝对路径,不能写 ./myapp 或 myapp。

    2. 不要自己重定向日志,比如 ExecStart=/opt/myapp/myapp > /var/log/app.log,这种 shell 语法 systemd 不认,要包一层 bash -c,或者直接用 journal。

    3. 程序崩溃后 systemd 能自动重启,前提是配了 Restart=on-failure,这比 nohup 稳得多。

    4. 简单说:程序本身不用改,只要它能前台常驻运行就行。唯一要改的是写一个 .service 配置文件。

 

4. 把服务文件拷贝过去,文件名以 .service 结尾

    sudo cp myapp.service /etc/systemd/system/myapp.service

 

5. 然后设置权限(建议 644)

    sudo chmod 644 /etc/systemd/system/myapp.service


6. 重载配置

    sudo systemctl daemon-reload

    让 systemd 重新读取 /etc/systemd/system/ 下的配置文件。


7. 设为开机自启

    sudo systemctl enable myapp.service

    在 /etc/systemd/system/multi-user.target.wants/ 下创建一个符号链接,指向你的 .service 文件。

    注意:enable 只是设置开机自启,不会立即启动服务。


8. 立即启动

    sudo systemctl start myapp.service


9. 重启服务

    sudo systemctl restart myapp.service


10. 验证状态

# 查看当前运行状态

    sudo systemctl status myapp.service


# 查看是否已设为开机自启

    sudo systemctl is-enabled myapp.service

    status 输出中看到 active (running) 说明正在跑;is-enabled 输出 enabled 说明开机自启已生效。


微信小程序扫码登陆

文章评论

110人参与,0条评论