liunx将自己的程序注册成systemd服务,开机自启动,自定义system服务,详细!~~

liunx将自己的程序注册成systemd服务

你是否有想要的程序开机自启动,每次开机都自己启动服务,这样非常的麻烦

开始教学

在Linux系统中,我准备了二进制文件注册为systemd服务以实现开机启动和作为守护进程运行,你需要按照以下步骤操作:

1.创建systemd服务单元配置文件

首先,在 /etc/systemd/system//usr/lib/systemd/system/(目录下创建一 个名为 xxx.service 的文件。这个文件是用来描述如何启动、管理和监控你的Go程序的服务单元。)我这边以我的二进制程序img1.2做示例:编辑的你的xxx.service

[Unit]
Description=xxx          # 描述你的文件是干什么的
After=network.target 				 #这个代表网络服务启动完毕后,再启动程序
# 可根据需要添加依赖的服务,例如:After=mysqld.service xxx xx2 多的请你用空格隔开
[Service]
ExecStart=/path/to/img1.2  # 替换为你的二进制文件的实际路径 也可以是脚本文件.sh
Restart=on-failure          # 如果程序崩溃则自动重启
RestartSec=5                # 重启间隔时间
User=<username>            # 运行此服务的用户,默认可以是root,也可以指定其他非特权用户 可以不填
Group=<groupname>           # 运行此服务的组,默认与User相同 可以不填
Type=simple                 # 对于大多数二进制文件来说,Type=simple即可 及跑一次一直运行
# 根据程序需求,可能需要环境变量设置,如:
Environment="VAR_NAME=value"  #无要求可删
[Install]
WantedBy=default.target      # 表示随系统启动时加载该服务

注意:把完成以上编辑之后,把不用的注释删除掉,以免不必要的麻烦。
这边我准备的纯净一点的模板其中[]代表你要填的 只需要填两个简单服务

[Unit]
Description=[你的服务描述]
After=network.target

[Service]
ExecStart=[启动路径]
Restart=on-failure         
RestartSec=5                
User=root          
Group=root       
Type=simple               

[Install]
WantedBy=default.target    

2.创建完毕文件之后 权限问题

注意要给文化相对于权限,给你刚刚上面的xxx.service权限
进入写的这个文件的文件夹 给对应的权限
以及你二进制文件的权限!!!重要!!!ExecStart=[启动路径]的权限

chmod 777 xxx.service

3.开始测试

重载 systemd 配置: 为了使systemd识别到新的服务文件,需要执行以下命令来重新加载系统单元文件。为了方便我以下用我的img1.service做示例。你要改服务的名字xxx.service

sudo systemctl daemon-reload

启动服务: 使用 systemctl start 命令启动你的服务。

sudo systemctl start img1.service

检查服务状态: 确认服务是否成功启动以及运行状态如何。

sudo systemctl status img1.service

如果服务成功启动,你应该能看到类似“active (running)”的状态信息。失败是fail要查看对应的原因
使用journalctl来查明对应的原因

sudo journalctl -u img1.service

设置开机自启: 如果希望该服务在系统启动时自动运行,可以启用它!!

sudo systemctl enable img1.service

手动停止并再次启动以验证重启功能: 测试Restart设置是否生效,你可以先停止服务,然后再次启动它。

sudo systemctl stop img1.service
sudo systemctl start img1.service

请注意,如果你的服务有依赖关系或者需要特殊的环境变量设置,请确保这些都在service文件中正确配置。也可以重启机器进行测试

reboot

4.报错,使用脚本的方式

上诉成功了,可以不看此内容
确保你手动启动你的二进制是可以成功的!!!
如果你实在找不到原因,可以使用注册脚本的方式,来替换ExecStart=[启动路径][]的内容
在任意路劲下写 xxx.sh文件 如 按下shift+: ---- :wq保存并退出 ---- :q!强制退出

vim /usr/script/xxx.sh

写对应你的启动命令如

#!/bin/bash
cd /xxx/xxx/xxx  #你二进制文件夹的位置
./img1.2   # 启动 不用+&还是nohup什么的

给.sh文件相对应的权限

chmod 777 xxx.sh

改写ExecStart=[启动路径][]的内容

[Unit]
Description=[你的服务描述]
After=network.target

[Service]
ExecStart= /usr/script/xxx.sh #你的脚本路径
Restart=on-failure         
RestartSec=5                
User=root          
Group=root       
Type=simple               

[Install]
WantedBy=default.target    

回到第三步进行测试,基本就解决问题的!

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1. 创建一个shell脚本 首先,我们需要编写一个启动自己程序的shell脚本,比如我们的程序是/home/user/myapp/myapp,那么我们可以在/home/user/myapp/目录下创建一个start.sh文件文件内容如下: #!/bin/bash cd /home/user/myapp/ ./myapp 注意,要给start.sh文件赋予可执行权限: chmod +x /home/user/myapp/start.sh 2. 创建一个systemd服务文件 接下来,我们需要创建一个systemd服务文件,这个文件告诉systemd如何启动我们的程序,并在开机自动启动。在/etc/systemd/system/目录下创建一个myapp.service文件文件内容如下: [Unit] Description=My App Service After=network.target [Service] Type=simple User=user WorkingDirectory=/home/user/myapp/ ExecStart=/home/user/myapp/start.sh Restart=always [Install] WantedBy=multi-user.target 说明: - Description:服务的描述信息。 - After:告诉systemd这个服务必须在network.target启动之后启动。 - Type:启动程序的类型,这里是simple,表示直接执行ExecStart指定的脚本。 - User:指定服务运行的用户。 - WorkingDirectory:指定启动程序的工作目录,这里是/home/user/myapp/。 - ExecStart:指定启动程序的命令,这里是/home/user/myapp/start.sh。 - Restart:当程序意外退出时,自动重启。 - WantedBy:告诉systemd这个服务应该在哪个target中启动,这里是multi-user.target,表示多用户模式下启动。 3. 启动服务上面两步后,我们就可以启动这个服务了: systemctl start myapp.service 4. 设置开机自启动 为了让这个服务开机时自动启动,我们需要运行: systemctl enable myapp.service 这样,当我们下次重启系统时,这个服务就会自动启动了。 5. 查看服务状态 我们可以随时查看服务的状态: systemctl status myapp.service 也可以查看服务的日志: journalctl -u myapp.service 到此为止,我们就功地将我们的程序设置为了开机自启动Linux服务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

viktor116

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值