QNAP 自定义应用开机自启(QTS / QuTS Hero)

QNAP 不能直接用普通 Linux systemd,官方标准方案:autorun.sh,在 NAS 开机后期执行自定义脚本 / 程序。 区分两种场景:Docker 容器原生二进制 / 自己编译的独立程序

一、Docker 容器(最简单,优先用这个)

如果你自定义应用跑在 Container Station 里:

  1. Container Station → 容器列表,编辑容器
  2. 重启策略unless-stopped(推荐,手动停容器就不会自动拉起;NAS 重启自动启动)
    • always:任何退出都自动重启
    • on-failure:异常退出才重启
  3. 保存,NAS 重启自动跑容器。

二、原生自定义程序(非 Docker,重点:autorun.sh)

前置准备

  1. 控制台 → 网络与文件服务 → 开启 SSH(端口默认 22)
  2. 控制台 → 硬件 → 常规,页面底部勾选:启动时运行用户定义的进程 (autorun.sh),点应用

方式 A:网页直接编辑(QTS 新版支持,推荐)

硬件页面勾选 autorun 之后,旁边有查看 autorun.sh,直接网页编辑,不用 mount 分区。 脚本模板示例:

#!/bin/sh
# 等待磁盘挂载就绪,避免程序早启动失败
sleep 30
# 启动你的程序,后台运行 &
/share/CACHEDEV1_DATA/myapp/myprogram &
# 日志输出方便排错
echo "myapp started" >> /share/CACHEDEV1_DATA/myapp/start.log

要点:加 sleep 延时!NAS 开机时磁盘、网络还没就绪,直接启动大概率失败。程序必须后台运行,末尾加&,否则卡住开机流程。

方式 B:SSH 命令行编辑(全版本兼容)

  1. SSH 登录 NAS(admin)
  2. 挂载 config 分区(Intel/AMD HAL 机型,绝大多数新款)
mount $(/sbin/hal_app --get_boot_pd port_id=0)6 /tmp/config

老款 ARM 机型:mount -t ext2 /dev/mtdblock5 /tmp/config

  1. 编辑 autorun.sh
vi /tmp/config/autorun.sh

写入上面的脚本内容 4. 赋予执行权限

chmod +x /tmp/config/autorun.sh
  1. 必须卸载分区(非常重要,否则不保存)
umount /tmp/config
  1. 重启 NAS 测试

三、进阶:QPKG 自定义套件(更规范,适合长期维护)

如果你打包成 QPKG 套件,可以自带init.d启动脚本,QTS 会像官方套件一样管理启停:

  • 套件目录:/share/CACHEDEV1_DATA/.qpkg/你的套件名/
  • 新建启动脚本 init.sh,实现 start|stop|restart 参数
  • qpkg.cfg注册,App Center 里可以直接勾选自动启动。 优点:支持在 App Center 一键启停;缺点:需要学习 QPKG 打包。

四、排错要点(高频踩坑)

  1. 路径写绝对路径,不要用相对路径(NAS 开机 PATH 环境变量不一样)
  2. sleep 延时:30~60 秒,根据你的程序依赖(磁盘 / 网络)调整
  3. 后台运行&,否则脚本阻塞,NAS 开机卡住
  4. 输出日志到共享文件夹,重启后看日志判断有没有执行
  5. 权限:程序文件需要可执行chmod +x 程序名
  6. 测试:先 SSH 手动执行一次你的启动命令,确认能正常跑,再放进 autorun.sh

五、备选:任务计划(不推荐做开机服务)

控制台 → 任务计划程序 → 新建【开机】任务。

缺点:执行时机比 autorun 晚很多,而且如果程序崩溃不会自动重启;适合一次性简单脚本,不适合常驻后台服务。

六、安全提醒

autorun.sh 权限很高,只放你信任的脚本;不要随便网上复制脚本直接写入。

THE END
抢沙发

请登录后发表评论

    暂无评论内容