无 sudo 权限下的进程自启方案:crontab @reboot 实战
背景
在 Linux 服务器上,部署了一个本地大模型推理服务(llama-server),需要一个开机自启的方案。但问题来了——没有 sudo 权限。
常见自启方案对比
| 方案 | 需要 sudo | 适用场景 |
|---|---|---|
| systemd 服务 | ✅ 是 | 有 root 权限的标准方案 |
| /etc/rc.local | ✅ 是 | 传统方案 |
| crontab @reboot | ❌ 否 | 无 root 用户首选 |
| ~/.bashrc / ~/.profile | ❌ 否 | 交互式登录才触发 |
| supervisor 用户模式 | ❌ 否 | 需要额外安装 |
crontab @reboot 方案详解
启动脚本编写
#!/bin/bash
# /home/ai/start_35b.sh
/home/ai/llama.cpp/build/bin/llama-server \
--model /path/to/model.gguf \
--mmproj /path/to/mmproj.gguf \
--host 0.0.0.0 --port 8001 --alias 35B \
--ctx-size 49152 \
--n-gpu-layers -1 \
--cont-batching \
--mlock --no-mmap \
--cache-type-k q8_0 \
--cache-type-v q8_0
添加 crontab 条目
crontab -l 2>/dev/null
echo "@reboot /home/ai/start_35b.sh >> /tmp/llama-35b.log 2>&1" | crontab -
验证是否生效
crontab -l
# 输出: @reboot /home/ai/start_35b.sh >> /tmp/llama-35b.log 2>&1
方案优缺点
优点
- ✅ 零权限依赖:用户级 crontab,不需要 root
- ✅ 简单可靠:系统自带,无需额外软件
- ✅ 日志可追踪:通过重定向将输出保存到文件
缺点
- ⚠️ 无法自动重启(如果进程退出,@reboot 不会重新拉起)
- ⚠️ 依赖 crond 服务正常运行
- ⚠️ 调试需查看日志文件排查
改进建议
如果需要进程守护能力,可以用一个小技巧:在脚本中加一个监控循环,或使用 screen/tmux 结合 while 循环:
#!/bin/bash
while true; do
/path/to/llama-server ...
sleep 5 # 退出后等 5 秒自动重拉
done
经验总结
- crontab @reboot 是无 sudo 用户的救命方案,简单但有效
- 搭配日志重定向方便排查启动失败原因
- 如果需要进程守护(进程退出自动重启),需额外加 while 包装
- 修改配置后记得手动执行一次脚本验证,不必等重启