Linux系统创建自启动服务

📅 2026/6/18 11:54:54
Linux系统创建自启动服务
一、 Systemd 服务目录1传统/etc/init.d/内写入的是脚本文件现代化的都是XXX.service 文件。2个人写的子系统服务建议放在/etc/systemd/system/目录下目录用途优先级/etc/systemd/system/管理员自定义/覆盖服务最高/run/systemd/system/运行时临时服务重启丢失中等/lib/systemd/system/系统包安装的默认服务最低~/.config/systemd/user/用户级仅当前用户最低/etc/init.d/系统级传统方式、传统脚本二、文件写入内容位置/etc/systemd/system/MyTsk.serviceRestarton-failure这样可以实现关闭程序它又自己启动也就是系统发现该进程关闭了又会重新启动该进程。kickpikickpi:/etc/systemd/system$ cat MyTsk.service [Unit] DescriptionMy TSK Application Service # 依赖网络图形界面启动完成再运行 Afternetwork.target graphical.target # 强制要求图形目标否则不启动 Requiresgraphical.target [Service] Typesimple Userkickpi Groupkickpi WorkingDirectory/home/kickpi EnvironmentLD_LIBRARY_PATH/opt/prefix/lib EnvironmentDISPLAY:0 # 预等待缩短超时拉长避免卡死 #ExecStartPre/bin/sleep 15 ExecStart/bin/bash /home/kickpi/Run_app.sh #关闭后启动 Restarton-failure RestartSec10 TimeoutStartSec90 StandardOutputjournal StandardErrorjournal [Install] # 关键改为图形目标开机自启 WantedBygraphical.target/home/kickpi/Run_app.sh是个脚本文件内容如下/home/kickpi/appTSK_SWZF是qt程序cronolog 是每天创建日志的命令。kickpikickpi:/etc/systemd/system$ cat -n /home/kickpi/Run_app.sh 1 #!/bin/bash 2 #sudo apt update 3 #sudo apt install -y cronolog 4 export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/opt/prefix/lib 5 /home/kickpi/appTSK_SWZF -platform xcb 21 | cronolog /home/kickpi/tsk_all_file/runlog/tsk_%Y-%m-%d.log三、服务命令构建服务程序systemctl命令步骤1、修改XXX.service文件后执行 sudo systemctl daemon-reload // 重新加载 systemd让系统识别新服务 sudo systemctl start myapp //重新加载启动服务 sudo systemctl status myapp //服务状态查看 sudo systemctl enable myapp //设置开机自启动 sudo systemctl is-enabled MyTsk /验证是否已启用 # 应该输出enabled sudo systemctl status MyTsk # 查看服务状态 # Loaded 行应该显示enabled 2、修改了 [Install] 部分执行例如 从 WantedBygraphical.target 改为 WantedBymulti-user.target sudo systemctl reenable MyTsk.service 3、重启进程执行 # 重置失败状态 sudo systemctl reset-failed MyTsk.service # 重新启动 sudo systemctl start MyTsk.service # 查看运行状态 sudo systemctl status MyTsk.service其它命令如下sudo systemctl start 服务名 # 启动服务 sudo systemctl stop 服务名 # 停止服务 sudo systemctl restart 服务名 # 重启服务 sudo systemctl reload 服务名 # 重新加载配置不中断服务 systemctl status 服务名 # 查看服务状态 systemctl is-active 服务名 # 查看服务是否运行中 sudo systemctl enable 服务名 # 启用开机自启动 sudo systemctl disable 服务名 # 禁用开机自启动 systemctl is-enabled 服务名 # 查看是否已启用开机自启动 systemctl list-unit-files --stateenabled # 查看所有已启用的服务 systemctl list-units --typeservice # 查看所有正在运行的服务 systemctl list-units --typeservice --all # 查看所有服务包括未运行的 systemctl show --propertyUserspaceTimestamp # 查看系统启动时间 systemctl get-default # 查看系统当前运行级别四、加载地址查看查看系统服务ssh 的加载地址是/etc/systemd/system/MyTsk.serviceLoaded: loaded (/etc/systemd/system/MyTsk.service; enabled; vendor preset: enabled)这个是个qt图形界面程序开机自启动正常运行了。五、附录上述可以实现开机自启动qt程序但是它启动的时机是桌面显示成功后再自启动qt程序。说人话就是先显示桌面然后启动预定的程序。守护进程查看 kickpikickpi:~$ ls -l /proc/2433/fd/0 lr-x------ 1 kickpi kickpi 64 Jun 18 09:27 /proc/2433/fd/0 - /dev/null kickpikickpi:~$ ps -o ppid -p 2433 1 kickpikickpi:~$ ps -o sid -p 2433 2433解读2433bash 守护脚本→ 子进程 2441业务 appTSK_SWZF、2442cronolog 日志工具cronolog 负责接收业务程序 stdout/stderr自动按日期切割落地日志到/home/kickpi/tsk_all_file/runlog/