用systemd用户服务实现登录前启动+后台守护是最稳定方式,适用于无gui依赖的长期驻留脚本;也可通过.desktop文件在ukui桌面就绪后启动;还需用kysec-ppro-add将脚本pid加入kysec白名单防冻结。

你想让一个Shell脚本在麒麟OS开机时自动运行,同时不占用终端窗口、不被系统后台管理策略冻结——这需要同时解决启动时机、执行环境和进程保活三个问题,缺一不可。
用systemd用户服务实现登录前启动+后台守护
这是最稳定的方式,适用于无GUI依赖、需长期驻留的脚本(如日志采集、网络心跳、API代理),它在你登录前就已拉起,且自带重启、失败延迟、依赖声明能力。
第一步:创建服务单元文件目录
执行命令:mkdir -p ~/.config/systemd/user
第二步:新建服务定义文件
用nano打开:nano ~/.config/systemd/user/monitor-backup.service
第三步:填入以下内容(请严格替换/home/kylin/scripts/backup.sh为你的实际脚本绝对路径):
[Unit]
Description=后台备份监控服务
After=network.target
[Service]
Type=simple
ExecStart=/bin/bash -c "/home/kylin/scripts/backup.sh"
Restart=on-failure
RestartSec=10
Environment=DISPLAY=:0
User=kylin
[Install]
WantedBy=default.target
第四步:启用并启动服务
执行:systemctl --user daemon-reload && systemctl --user enable monitor-backup.service && systemctl --user start monitor-backup.service
第五步:验证是否生效
运行:systemctl --user status monitor-backup.service,看到active (running)即成功。重启后该服务仍会自动启动。
通过.desktop文件实现桌面会话就绪后启动
适合需要X11图形环境、弹窗提示或访问用户主目录的脚本,比如带通知的定时清理、截图上传工具。它不依赖systemd,但必须等UKUI桌面完全加载后才执行。
方法一:复用系统已有.desktop文件
先确认脚本对应程序是否有.desktop文件,例如:ls /usr/share/applications/ | grep -i firefox。若有,执行:mkdir -p ~/.config/autostart && cp /usr/share/applications/firefox.desktop ~/.config/autostart/,再编辑该文件,把Exec=行改为:Exec=/bin/bash -c "/home/kylin/scripts/notify.sh"。
方法二:手写专用.desktop文件
在任意位置新建文件myscript.desktop,内容如下:
[Desktop Entry]
Name=后台通知脚本
Type=Application
Exec=/bin/bash -c "/home/kylin/scripts/notify.sh"
Terminal=false
Hidden=false
StartupNotify=false
Path=/home/kylin/scripts
【Path字段必须填写,否则脚本内cd或相对路径会失效】
保存后执行:chmod 644 ~/.config/autostart/myscript.desktop,并将该文件复制到~/.config/autostart/目录。
解除KYSEC进程保护防止后台冻结
即使脚本已成功启动,麒麟OS的KYSEC安全子系统仍可能将其标记为“非可信进程”并在后台静默终止。必须显式豁免才能长期存活。
第一步:以root身份打开终端,执行:sudo -i
第二步:确认进程保护已启用
运行:kysec-ppro-getstatus,若输出含process protect: on,继续下一步;否则跳过。
第三步:获取脚本当前PID
先手动运行一次你的脚本:/bin/bash /home/kylin/scripts/backup.sh &,再执行:pgrep -f "backup.sh" | head -n1,记录返回的数字(即PID)。
第四步:永久加入KYSEC白名单
执行:kysec-ppro-add --pid <strong>【上一步得到的PID】</strong> --user kylin --permanent,无需重启立即生效。











