朋友们,还在为服务器重启后手动启动各种服务而烦恼吗?今天给大家带来Linux系统服务的终极解决方案!从创建服务到开机自启动,一篇搞定,让你的程序像系统服务一样稳定运行!
假设我们有一个Node.js应用,启动命令为:
node /opt/myapp/app.js
在/etc/systemd/system/
目录下创建服务文件:
sudo vim /etc/systemd/system/myapp.service
[Unit]
Description=My Node.js Application
After=network.target
Wants=network.target
[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node /opt/myapp/app.js
Restart=always
RestartSec=10
Environment=NODE_ENV=production
Environment=PORT=3000
[Install]
WantedBy=multi-user.target
参数 | 说明 | 示例 |
---|---|---|
Description | 服务描述 | ”My Node.js Application” |
After | 指定服务启动顺序 | network.target |
Wants | 弱依赖关系 | network.target |
Requires | 强依赖关系 | mysql.service |
参数 | 说明 | 推荐值 |
---|---|---|
Type | 启动类型 | simple/forking/oneshot |
User/Group | 运行用户 | www-data/nobody |
WorkingDirectory | 工作目录 | /opt/myapp |
ExecStart | 启动命令 | /usr/bin/node app.js |
Restart | 重启策略 | always/on-failure/no |
RestartSec | 重启间隔 | 10秒 |
Environment | 环境变量 | NODE_ENV=production |
参数 | 说明 |
---|---|
WantedBy | 目标运行级别 |
RequiredBy | 强制依赖 |
# 重新加载systemd配置
sudo systemctl daemon-reload
# 启动服务
sudo systemctl start myapp
# 停止服务
sudo systemctl stop myapp
# 重启服务
sudo systemctl restart myapp
# 查看状态
sudo systemctl status myapp
# 启用开机启动
sudo systemctl enable myapp
# 禁用开机启动
sudo systemctl disable myapp
# 检查是否启用
sudo systemctl is-enabled myapp
# 查看实时日志
sudo journalctl -u myapp -f
# 查看最近100行日志
sudo journalctl -u myapp -n 100
# 查看今天的日志
sudo journalctl -u myapp --since today
# 查看错误日志
sudo journalctl -u myapp --priority=err
创建模板服务文件myapp@.service
:
[Unit]
Description=My App Instance %i
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/node /opt/myapp/app.js --port=%i
Restart=always
[Install]
WantedBy=multi-user.target
启动多个实例:
sudo systemctl start myapp@3000