我是一个Linux小白,最近在做一个微信小程序监控项目,使用的是海康威视的网络硬盘录像机加萤石云的解决方案。
由于每个摄像头需要显示缩略图,但是缩略图抓取又比较耗时(4秒才出一张图),所以打算服务器定时抓取每个摄像头的缩略图,然后缓存图片链接到Redis,在有人打开微信小程序的时候,直接返回内存里的图片。
这样既可以减少服务器的负担,同时使得抓图频率在可控的范围内。
注意:设备抓图能力有限,请勿频繁调用,频繁调用将会被拉入限制黑名单,建议调用的间隔为4s左右。
以上是来自萤石官方的提醒,有点怕怕的。所以我就按照建议把抓图间隔设置为4秒,AccessToken也存放到了内存,防止重复生成。
我执行了下面的命令:
php /xxx/getCapture.php
文件在服务器里跑起来了,小程序开发工具里也看到抓图了,很不错,然后我就把shell界面关掉睡觉去了。
第二天,打开小程序一看,缩略图全黑了,怎么回事?检查发现抓图并没有一直执行,在我关闭shell界面就停了。百度了一下在命令后面添加“&”可以让命令在后台运行,像这样:
php /xxx/getCapture.php &
我心想,这下可以了吧,还专门提交了一个小程序体验版本,修改内容是:修复抓图不显示的问题。就这样提交给微信那边审核去了,版本号填的是:0.0.4。
提交审核第二天下午,审核结果出来了,审核未通过,理由是怀疑拿测试的版本/内容提交审核,我赶紧打开小程序看了一下,缩略图又黑了,不过我认为不通过的原因并不是这个,应该是版本号的问题。
我把版本号修改为1.0.0,其他没修改,包括看不到缩略图也没修复,重新提交审核。等到第二天,居然通过了!Yeah~~
但是缩略图还是看不到啊,所以又看了一下代码,也没啥问题,之前运行的php文件又消失了,难道是系统资源不足被杀了?
后来经过查询相关资料,了解到只在后面加一个 &
运行有个缺点:当前 session
断开时,会向其子进程发出 hang up
信号,导致挂起中断。解决方法是使用 nohup
配合 &
,忽略挂起信号运行:
nohup php /xxx/getCapture.php &
还有其他方法,请参考文章:Linux 技巧:让进程在后台运行更可靠的几种方法
Tips:执行nohup的命令后会紧跟着一句话:
nohup: ignoring input and appending output to ‘nohup.out’
意思是忽略的信息会被写入到nohup.out文件中,打印信息多了,时间长了就会占用宝贵的服务器存储空间!前同事有一天找我,说服务器无法上传文件了,找不到原因,问我怎么办?文件夹权限也看过了没问题,那就是服务器存储空间满了。由于我们做的项目都不大,阿里云最低配服务器的40G硬盘通常是用不完的,最后发现是 nohup.out 这个文件捣的鬼,一个文件占了服务器99%的空间,导致无法上传。再看一下后台运行的程序,打印了好多调试信息、错误信息出来,最终都保存到了 nohup.out ,时间长了就满了,解决方法是把打印信息指向一个不存在的路径,就不会保存了
nohup php /xxx/getCapture.php >/dev/null 2>&1 &