linux 创建自定义的服务项

创建一个系统服务


sudo vim /etc/systemd/system/myprogram.service
创建文件


[Unit]
Description=我的自定义程序服务
After=network.target  # 可选:在网络启动后运行,如果需要网络依赖

[Service]
Type=simple  # 默认类型,主进程直接运行
ExecStart=/usr/bin/myprogram  # 启动命令,必须用绝对路径
ExecReload=/bin/kill -HUP $MAINPID  # 可选:重载命令
Restart=always  # 可选:程序退出时自动重启(推荐)
WorkingDirectory=/path/to/dir  # 可选:工作目录
Environment="KEY=VALUE"  # 可选:环境变量

[Install]
WantedBy=multi-user.target  # 开机自启动的目标


#simple:程序直接在前台运行(最常见)。  类似于夯住前台一样 ,脚本的内的就不能 添加 进入后台的命令了,比如 nohub  &  ssh -f 之类的
forking:程序通过 fork() 后台运行(旧式 daemon,需要指定 PIDFile)。
oneshot:只执行一次命令(如脚本),然后退出。
你的程序是脚本(如 /opt/myscript.sh),确保脚本有执行权限(chmod +x),并在 ExecStart 中用 /bin/bash /opt/myscript.sh


创建一个最脚本的server服务

脚本 chmod +x 给权限 
[root@123 /server/my-ssh-proxy]# cat my-ssh-proxy.sh 
#!/bin/bash
exec /usr/bin/ssh -o StrictHostKeyChecking=no  -C  -g -b 0.0.0.0  -L 1080:192.168.1.11:1080 root@192.168.1.198  "vmstat 30" >/dev/null

# 注意 simple:程序直接监测 在前台运行  脚本的内的就不能 添加 进入后台的命令了,比如 nohub  &  ssh -f 之类的


cat >/etc/systemd/system/my-ssh-proxy.service<<'EOF'
[Unit]
Description=my-ssh-proxy
After=network.target
[Service]
Type=simple
ExecStart=/server/my-ssh-proxy/my-ssh-proxy.sh
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
EOF


sudo systemctl daemon-reload
# 重新加载systemd 的配置
sudo systemctl daemon-reset-failed my-ssh-proxy.service   # 清除之前的失败状态

systemctl enable my-ssh-proxy.service 
# 在设置一下开机自动启动
CentOS 7 中,systemd 的版本较旧(通常是 systemd 219 或类似版本),不支持 StartLimitIntervalSec 和 StartLimitBurst 这两个参数。
这两个参数是从 systemd 230 版本开始才引入的:

CentOS 7:systemd 219(不支持)
CentOS 8 / RHEL 8及以后:systemd 239+(支持)


有些参数 可以支持 有些不支持,一般就是 用户和用户组
重启的故障状态检查
Restart=always  重启类型
RestartSec=10   重启时间间隔
StartLimitIntervalSec=60 重启窗口
StartLimitBurst=3      重启窗口内的重启次数
posted @ 2025-12-30 21:35  mmszxc  阅读(37)  评论(0)    收藏  举报