麒麟OS启动自启脚本需按场景选机制:图形界面用“开机启动”设置或.desktop文件,守护服务用systemd用户级服务,简单脚本可用rc.local;务必用绝对路径、显式调用/bin/bash、正确配置权限与环境变量。

你想让某个Shell脚本在麒麟OS启动后自动运行,但脚本没反应、不执行、或只在终端里能跑——根本原因往往不是脚本本身有问题,而是启动时机错配、执行环境缺失、路径写错或权限没到位。不同场景必须用不同机制,选错一种就白配。
图形界面下启动(适合带GUI或依赖桌面环境的脚本)
点击左下角“开始菜单” → 打开“设置” → 进入“系统”模块 → 切换到“开机启动”选项卡。
点击“添加自启动程序”,在弹出窗口中填写名称(如“每日备份”),并在“命令”栏输入:【/bin/bash /home/kylin/scripts/backup.sh】。
这一步必须用绝对路径,且显式调用/bin/bash;如果只写/home/kylin/scripts/backup.sh,脚本里的$HOME、重定向、管道等shell特性会全部失效。
点“添加”后,新条目出现在列表中,右侧开关默认开启;重启前可手动关闭测试效果。
复制.desktop文件到用户级autostart目录(适合批量部署或需确保X11就绪的脚本)
方法一:复用系统已有.desktop文件
先确认目标脚本是否已封装为.desktop,例如/usr/share/applications/gedit.desktop存在,则执行:
mkdir -p ~/.config/autostart && cp /usr/share/applications/gedit.desktop ~/.config/autostart/
方法二:手写专用.desktop文件
新建文件~/myscript.desktop,内容如下:
[Desktop Entry]
Name=定时清理缓存
Type=Application
Exec=/bin/bash -c "/home/kylin/scripts/clean_cache.sh"
Terminal=false
Hidden=false
【Exec字段必须用绝对路径,且必须包裹在/bin/bash -c ""中,否则脚本内所有变量、&后台、>>日志重定向都会静默失败】
保存后执行:
chmod 644 ~/.config/autostart/myscript.desktop
配置systemd用户级服务(适合登录前就运行、需守护和自动重启的脚本)
第一步:创建服务单元目录并新建文件
mkdir -p ~/.config/systemd/user && nano ~/.config/systemd/user/cleanup.service
第二步:填入标准配置(按实际路径替换)
[Unit]
Description=缓存清理服务
After=network.target
[Service]
Type=simple
ExecStart=/home/kylin/scripts/clean_cache.sh
Restart=on-failure
RestartSec=3
[Install]
WantedBy=default.target
第三步:启用服务
systemctl --user daemon-reload
systemctl --user enable --now cleanup.service
注意:此服务在你登录前即启动,不依赖图形界面;但若脚本需要DISPLAY或XAUTHORITY变量,必须手动注入,否则GUI操作会失败。
通过rc.local启动(仅限简单脚本,且必须绕过systemd环境限制)
编辑系统级启动钩子:
sudo nano /etc/rc.d/rc.local
在exit 0这一行之前,添加你的脚本完整路径:
/home/kylin/scripts/health_check.sh &
赋予可执行权限:
sudo chmod +x /etc/rc.d/rc.local
启用rc-local服务:
sudo systemctl enable rc-local && sudo systemctl start rc-local
这个方法执行早、无用户环境、PATH极简;脚本里所有命令必须写绝对路径,比如用/bin/echo而不是echo,否则大概率报command not found。

















