银河麒麟系统开机自启需按场景选机制:图形界面用设置→开机启动并显式调用/bin/bash;批量部署可手写.desktop文件,Exec必须用/bin/bash -c包裹;守护类脚本应配置systemd用户服务并启用。

你想让某个Shell脚本在银河麒麟系统启动后自动运行,但脚本没反应、不执行、或只在终端里能跑——根本原因往往不是脚本本身有问题,而是启动时机错配、执行环境缺失、路径写错或权限没到位。不同场景必须用不同机制,选错一种就白配。
图形界面下添加开机自启(适合带GUI或需X11的脚本)
点击左下角“开始菜单” → 打开“设置” → 进入“系统”模块 → 切换到“开机启动”选项卡。
点击“添加自启动程序”,在弹出窗口中填写名称(如“终端监控”),并在“命令”栏输入:【/bin/bash /home/kylin/scripts/monitor.sh】。
这一步必须用绝对路径,且显式调用/bin/bash;如果只写/home/kylin/scripts/monitor.sh,脚本里的$HOME、重定向、管道等shell特性会全部失效。
点“添加”后,新条目出现在列表中,右侧开关默认开启;重启前可手动关闭测试效果。
手动部署.desktop到autostart目录(适合批量配置或绕过图形界面)
方法一:复用系统已有.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/log-collect.sh"
Terminal=true
Hidden=false
【Exec字段必须用绝对路径,且必须包裹在/bin/bash -c ""中,否则脚本内所有变量、&后台、>>日志重定向都会静默失败】
保存后执行:
chmod 644 ~/.config/autostart/myscript.desktop
配置systemd用户级服务(适合登录前就运行、需守护和自动重启的脚本)
第一步:创建服务单元目录并新建文件
mkdir -p ~/.config/systemd/user && nano ~/.config/systemd/user/log-collect.service
第二步:填入标准配置(按实际路径替换)
[Unit]
Description=终端日志采集服务
After=network.target
[Service]
Type=simple
ExecStart=/home/kylin/scripts/log-collect.sh
Restart=on-failure
RestartSec=3
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=default.target
第三步:启用服务
systemctl --user daemon-reload → systemctl --user enable log-collect.service → systemctl --user start log-collect.service
第四步:验证服务状态
systemctl --user status log-collect.service

















