Nextcloud 服务运维笔记
大段的部署就不写了,按官方文档。这里只零散记录一些小问题和技巧。
php-imagick 不支持 SVG 的警告
此实例中的 php-imagick 模块不支持 SVG。为了获得更好的兼容性,建议安装它
某个版本还误作“简易安装”……
博主 Athenavi 在这里说了一个方法,就是安装sudo apt-get install librsvg2-bin
,然后在/etc/ImageMagick-6/policy.xml
中适当地方加入:
<policy domain="coder" rights="read|write" pattern="LABEL" />
<policy domain="path" rights="read|write" pattern="@*" />
测试后没有解决(但也许仍是必要的)。
然后用英文搜了一下,发现还需要装这个包:apt-get install libmagickcore-6.q16-6-extra
——当然你看到这篇文章的时候就未必是这个版本了。
之后重启apache2
服务就好了。
cron 命令重叠的问题
一次上传大量文件的时候,可能出现一个问题,就是文件预处理(缩略图生成甚至OCR)耗时太长,上一次任务还没完成,下一次cron
又开始了。
Nextcloud貌似没有做这方面的预防,文件不太多的时候,多数时候相当于又开了一个线程处理,也还行。但cron
任务实在太多(例如一夜),第二天你就会发现服务器动不了的,RAM耗尽,oom日志一大堆,cron任务都卡死了,只能重启。
这个只能从cron
层面入手,根据Linux设计哲学,cron
本身是不管这个的,但有一个工具flock
是干这个的。装完这个工具之后这样写:
*/5 * * * * flock -xn /var/www/nextcloud/cron.lock.1 -c "php -f /var/www/nextcloud/cron.php"
*/5 * * * * flock -xn /var/www/nextcloud/cron.lock.2 -c "php -f /var/www/nextcloud/occ preview:pre-generate"
显然,需要手动新建两个文件cron.lock.1/2
到合适位置,实际要执行的命令写到-c
后面。cron.lock.1/2
文件是什么都行,甚至不新建用nexcloud的某个php文件也行。
运行的时候,flock会检查文件是否可以由自己独占,如果可以则执行命令,否则不执行。执行完毕之后,flock会自动释放独占关系。
显然,第二个任务过来的时候,因为第一个任务还没完成,所以flock会拒绝执行。这就避免了任务重叠的问题。