发布于2026-07-02 阅读(0)
扫一扫,手机访问
在银河麒麟V10系统中,想让脚本在开机时自动跑起来,并不是一个命令打天下的事儿。关键要看你的脚本是给系统看的,还是给用户看的——系统级服务有系统级的玩法,桌面程序有桌面程序的套路,用错了地方,脚本就会在你看不见的角落静悄悄地失败。
下面这几种主流机制,基本能覆盖所有场景了。
如果你的脚本是后台守护进程,或者需要在系统启动阶段就运行,那systemd就是首选。步骤很清晰,但有几个关键点容易踩坑:
首先,用root权限在/etc/systemd/system/下新建一个服务文件,比如叫myscript.service:
sudo vim /etc/systemd/system/myscript.service
接着,写入下面的内容。值得警惕的是,ExecStart字段必须使用绝对路径,千万别指望它能读取你的用户环境变量:
[Unit]
Description=My Custom Script
After=network.target
[Service]
Type=simple
ExecStart=/bin/bash /opt/scripts/myscript.sh
Restart=on-failure
RestartSec=5
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
然后,设置文件权限为644,属主是root:root。别小看这一步,权限不对,systemd直接不认:
sudo chmod 644 /etc/systemd/system/myscript.service
最后,重载配置并启用服务,一气呵成:
sudo systemctl daemon-reload -> sudo systemctl enable myscript.service -> sudo systemctl start myscript.service
执行完后,记得用sudo systemctl status myscript.service确认一下状态,确保是active (running)。
如果你用惯了Ubuntu的老路子,可能会惊讶地发现银河麒麟V10 SP1默认没有/etc/rc.local这个文件。别急,手动创建并激活rc-local服务就行。
第一步是启用rc-local服务链。执行sudo systemctl enable rc-local.service之前,最好先确认/lib/systemd/system/rc-local.service这个文件是存在的。
第二步,创建并配置/etc/rc.local文件:
sudo touch /etc/rc.local
编辑它,内容必须以#!/bin/bash开头,最后保留空行和exit 0,这是规矩:
#!/bin/bash
/opt/scripts/myscript.sh &
exit 0
【关键前提】千万别忘了给这个文件加上执行权限:sudo chmod +x /etc/rc.local,否则它只是个摆设。
最后,启用服务:sudo systemctl daemon-reload -> sudo systemctl start rc-local.service -> sudo systemctl enable rc-local.service
如果你的脚本是Qt写的界面,或者是一个Python的tkinter应用,那就不能用上面两种方法了。这类程序必须在用户登录后,由桌面环境(UKUI)来触发。
做法是创建一个.desktop文件:
sudo vim /etc/xdg/autostart/myapp.desktop
写入以下内容。注意,Name和Exec字段不能为空,而且Exec的路径必须是绝对且可执行的:
[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=My Qt App
Exec=/home/kylin/build-myapp-Release/myapp
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
然后,确保目标程序本身有执行权限:
chmod +x /home/kylin/build-myapp-Release/myapp
重启或注销重登后就能生效。如果没启动,可以去翻翻.xsession-errors日志,通常能定位到是哪些环境变量没配好。
这种方式适合那些只需在开机时跑一趟的脚本,比如清理日志、同步时间等,不太适合需要持续运行的守护进程。
对当前用户来说,执行crontab -e,然后加上一行:
@reboot /bin/bash /opt/scripts/myscript.sh
如果脚本需要root权限,就执行sudo crontab -e,同样加上这一行。
【易错点】crontab的环境变量非常干净,脚本内所有命令都必须用绝对路径。一个稳妥的做法是在脚本开头显式设置PATH:
PATH=/usr/local/bin:/usr/bin:/bin
这样一来,很多莫名其妙的“命令找不到”问题就迎刃而解了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9