@reboot 可让脚本在系统启动、cron 启动后立即运行一次,适用于初始化任务;需确保 cron 开机自启、使用绝对路径、设置执行权限、避免依赖未就绪服务,并推荐重定向日志以便排查。

在 crontab 中使用 @reboot 可以让脚本在系统每次启动完成、cron 服务启动后立即运行一次,适合执行初始化任务(如启动服务、挂载目录、清理临时文件等)。
确认 cron 服务已启用并开机自启
@reboot 依赖于 cron 守护进程正常运行。若 cron 未启动,该任务不会触发:
- Ubuntu/Debian:sudo systemctl enable cron(确保开机自启)
- CentOS/RHEL:sudo systemctl enable crond
- 验证状态:systemctl is-active cron 或 systemctl is-enabled cron
正确添加 @reboot 条目到用户或系统 crontab
@reboot 必须写在 crontab 文件的最前面(虽非强制,但推荐),且格式为一行一条,不带时间字段:
- 编辑当前用户 crontab:crontab -e,添加类似行:
@reboot /bin/bash /home/user/init.sh >/dev/null 2>&1 - 若需 root 权限(如操作设备、挂载、修改系统配置),应编辑 root 的 crontab:
sudo crontab -e - 注意:@reboot 不支持 % 字符(会与 cron 解析冲突),如需换行或特殊字符,建议封装进 shell 脚本中执行
确保脚本具备可执行权限和完整路径
系统启动时环境变量精简,PATH 往往不包含 /usr/local/bin 或 ~/bin,因此必须用绝对路径:
- 给脚本加执行权限:chmod +x /path/to/init.sh
- 脚本内避免依赖 $HOME 或未定义变量;推荐显式设置 PATH:
#!/bin/bash
PATH=/usr/local/bin:/usr/bin:/bin
cd /opt/myapp && ./start.sh - 建议重定向输出(尤其调试阶段):@reboot /path/to/script.sh >> /var/log/init.log 2>&1
验证是否生效及常见问题排查
@reboot 不会在当前会话立即运行,只能通过重启系统或模拟测试:
- 重启后检查日志:journalctl -u cron | grep "RUNNING",再查脚本输出或 touch 时间戳文件
- 常见失败原因:
– 脚本路径错误或不存在
– 缺少执行权限
– 依赖的服务(如网络、数据库)尚未就绪(@reboot 执行早于 network.target)
– 使用了交互式命令(如 sudo -i、expect) - 若需等待网络就绪,可加简单等待逻辑:sleep 10 && /path/to/script.sh,或改用 systemd service(更可靠)

















