Nas-QNAP-系列02-关于自定义脚本开机运行及nohup

Posted by

上一篇介绍了,QNAP外网访问的几种处理方式,最终选定了利用第三方软件natapp。那么如何保证服务在开机的时候,自动启动呢?natapp启动后,会进入该程序的功能显示界面,那对于我们来说,肯定是指期望它后台运行就可以了,不然,关掉窗口,该服务就退出了~~

一、QNAP设置开机自启运行自定义脚本命令

我原来无意之中发现了,在威联通的设置里面,有这样一个配置:

这里即提供的机器启动时运行的自定义脚本命令。

那么如何编辑这里的自定义脚本命令呢,官方wiki:https://wiki.qnap.com/wiki/Running_Your_Own_Application_at_Startup

执行完成后,记得要勾选那个启动执行的确认框

#挂载
mount $(/sbin/hal_app --get_boot_pd port_id=0)6 /tmp/config
#编辑
vi /tmp/config/autorun.sh
#添加执行权限
chmod +x /tmp/config/autorun.sh
#卸载
umount /tmp/config

二、QNAP添加扩展命令,nohup

在上一章提到了关于natapp的使用,当我们直接运行的时候,如果关闭了当前窗口,该服务就停止了,并且如果你直接在上述的启动脚本中直接运行该服务,那就会造成系统其他的应用被阻塞。我当初也是在启动命令那里直接加的运行natapp,发现natapp服务是启动了,但是其他的应用显示一直在启动中,于是可以想到,就是因为窗口的原因导致的。

熟悉linux的肯定就知道,那可以直接用nohup命令啊,让该服务后台运行。而真正去打出这行命令的时候,“command not found”,QNAP里面根本没有支持该命令。这个问题当时真是令我苦恼很久很久~~

实际上,原来QNAP是有提供相关应用可以来增强支持这些命令的,只是后来下架了。相关的app叫做Optware,即下载该app后,然后使用ssh连接nas,运行

1 ipkg update
2 ipkg install coreutils

这样,系统就支持该命令了。

可是,目前官方已经不支持该服务了,wiki上找到了官方的文档,如何安装Optware IPKG:https://wiki.qnap.com/wiki/Install_Optware_IPKG

总之,方案很明显了,就是利用opkg来实现包管理系统,找了N多资料,我在第三方应用商店上找到了相关应用(第三方应用商店:https://www.qnapclub.eu/):

第一个,optware-ng的logo一出来,就让我兴奋了一下,这个和原来官方的提供的应用logo基本一模一样,应该就是我们要找的,于是我将该app下载到本地后,从应用中心利用本地安装的方式安装,结果等了10分钟,一直没装上,我就放弃了。。。于是,我后面又换了一个方式。利用命令行,我下载了Entware-std之后,直接在命令行安装。

1 cd /tmp/
2 wget https://www.qnapclub.eu/en/qpkg/model/download/468616/Entware_1.02std.qpkg
3 sh Entware_1.02std.qpk
4 opkg update
5 opkg install coreutils

安装完成,发现依旧还是没有nohup,真令人纳闷,是不是nohup还需要单独利用opkg安装呢?我搜索了一下,opkg nohup,还真有单独的这个包:https://openwrt.org/packages/pkgdata/coreutils-nohup

于是,利用opkg再次安装nohup命令

1 opkg install coreutils-nohup

安装完成,执行命令,which nohup,果真可以了。于是赶紧把之前的自定义启动脚本命令更新,改为后台运行,nohup /share/virtual/natapp/natapp -config=/share/virtual/natapp/config.ini > /share/virtual/natapp/output.log 2>&1 &,重启试试。

发现,还是有问题,从日志上发现,nohup命令还是不存在,难道opkg被还原了?于是用opkg搜索一下,发现opkg的命令也没了!!!然后,我又换了一种执行路径,因为有可能只是因为环境变量的原因导致的,于是我记得当时该命令的全路径好像是/opt/bin下面的,因此换用全路径命令执行,发现可以找到nohup,于是将之前的自定义脚本命令重新用全路径nohup执行,保存,重启。

发现,还是有问题,该命令还是不存在。于是换了一个思路,有没有可能是因为执行顺序的原因,之前就发现了这个问题,自定义的启动脚本,执行的顺序是优先于内部app的,那我们是不是可以把自定义的命令放在opkg运行起来后去执行呢?中途找到了相关的一篇文章,该作者也同样发现,每次启动后,文件系统会被还原,于是他把自定义的脚本命令放在了/etc/init.d/Entware.sh里面。同理,我将自定义的命令放在/etc/init.d/Entware.sh里。调整后的命令如下,保存,再次重启…

这里我已经开启了3个内网穿透的服务

终于,natapp顺利启动!

其实,在最后安装完nohup命令后,我突然有找到了(该博客:https://jarvisstar.com/index.php/2020/01/22/qnap-%E5%A8%81%E8%81%94%E9%80%9A%E8%BF%9C%E7%A8%8B%E8%AE%BF%E9%97%AE-%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%EF%BC%88frp%EF%BC%89%E5%BF%83%E5%BE%97/)另一个有用的命令:setsid。里面提到这样一句话“如果我们的进程不属于接受 HUP 信号的终端的子进程,那么自然也就不会受到 HUP 信号的影响了”。意思好像理解,又好像比较缥缈,查了一下资料,还是没有具体理解,有知道的童鞋欢迎指导一下。

试了下,具体setsid我没有去使用,有用到的朋友可以交流一下哦

涉及资料

4 comments

  1. setsid 别用,命令执行到这一步就停了,entware启动会卡在这里

    1. 那说明还是启动的问题导致的,就跟直接运行命令而不是后台运行一样。不过我目前也一直使用的上述方式,开了4个端口,也挺稳定

  2. 用这样的命令也可以:使用 2>&1 &将输出转到后台,就不会卡住了,不需要装很多东西
    /share/CACHEDEV1_DATA/.qpkg/frpc/frpc -c /share/CACHEDEV1_DATA/.qpkg/frpc/frpc.ini > /share/homes/zheng7/tools/frpcrun.log 2>&1 &

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用*标注