1. 使用 systemd 服务单元(推荐)
这是 Fedora 16+ 的标准方法。
创建服务文件
sudo vi /etc/systemd/system/myscript.service
服务文件示例
[Unit]
Description=My Custom Startup Script
After=network.target
[Service]
Type=simple
ExecStart=/path/to/your/script.sh
User=yourusername
Restart=no
[Install]
WantedBy=multi-user.target
启用服务
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 启用开机启动
sudo systemctl enable myscript.service
# 启动服务(立即运行)
sudo systemctl start myscript.service
2. 创建 systemd 启动脚本
简单脚本示例 (/usr/local/bin/mystartup.sh)
#!/bin/bash
# 你的启动命令
echo "My startup script is running" > /var/log/mystartup.log
# 例如:启动某个程序
# /path/to/your/program &
设置权限
chmod +x /usr/local/bin/mystartup.sh
3. 使用 rc.local(传统方法,不推荐)
Fedora 16 默认没有 rc.local,但可以启用:
创建 rc.local 文件
sudo vi /etc/rc.d/rc.local
添加你的脚本内容,例如:
#!/bin/bash
/path/to/your/script.sh
exit 0
设置执行权限
sudo chmod +x /etc/rc.d/rc.local
启用 rc-local 服务
sudo systemctl enable rc-local.service
4. 用户级开机启动
对于用户特定的脚本(登录后运行):
创建 ~/.config/autostart/ 目录
mkdir -p ~/.config/autostart
创建 .desktop 文件
vi ~/.config/autostart/myscript.desktop
内容示例:
[Desktop Entry]
Type=Application
Name=My Startup Script
Exec=/home/username/scripts/mystartup.sh
Hidden=false
X-GNOME-Autostart-enabled=true
5. 使用 crontab 的 @reboot
# 编辑当前用户的 crontab
crontab -e
添加一行:
@reboot /path/to/your/script.sh
调试技巧
查看日志
# 查看 systemd 服务日志
sudo journalctl -u myscript.service
sudo journalctl -f # 实时查看日志
检查服务状态
sudo systemctl status myscript.service
测试脚本
# 直接运行测试
sudo /path/to/your/script.sh
注意事项
脚本权限:确保脚本有执行权限 (
chmod +x)
路径问题:在脚本中使用绝对路径
环境变量:systemd 服务默认环境有限,可能需要在服务文件中设置环境变量
依赖顺序:使用
After= 和
Requires= 确保正确的启动顺序
推荐实践
- 对于系统级服务,使用 systemd 服务单元
- 对于用户登录后运行的程序,使用 ~/.config/autostart/
- 避免直接修改系统启动脚本,保持可维护性
注意:Fedora 16 已于 2013 年停止支持,建议升级到更新的版本以获得更好的安全性和功能支持。