Nextcloud存在一个后台任务功能,Nextcloud对其作用大概解释如下:

像Nextcloud这样的系统有时需要定期完成任务,而不需要用户交互或阻碍Nextcloud性能。为此,作为系统管理员,您可以定义在不需要用户交互的情况下执行的后台作业(例如,数据库清理)。

我们在管理员后台看到后台任务的执行方式有三种:AJAX、Webcron、Cron,默认选项为AJAX。

三种方式区别如下:

AJAX:调度方法是默认选项。不幸的是,它也是最不可靠的。每次用户访问Nextcloud页面时,都会执行一个后台作业。这种机制的优点是它不需要访问系统也不需要注册第三方服务。与Webcron服务相比,这种机制的缺点是它需要定期访问页面才能触发它。

Webcron: 通过在外部webcron服务(例如,easyCron)上注册Nextcloud cron.php脚本地址,可以确保定期执行后台作业。要在服务器上使用此类服务​​,您必须能够使用Internet访问服务器。

Cron: 使用操作系统cron功能是执行常规任务的首选方法。此方法可以执行预定作业,而不会受到Web服务器可能具有的固有限制。

然而,默认的AJAX方式虽然方便,但也是最不可靠的,每个页面加载后执行一个任务,性能将大打节扣。

而Webcron要依赖于外部webcron,实现起来复杂。

官方推荐的是Cron方式,通过执行定时任务,实现Nextcloud后台任务的执行。

以下将介绍如何实现Cron方式的后台任务:(以ubuntu18为例)

ssh连接服务器,root用户登录。

sudo -s

使用apach2的www-data用户建立定时任务。

crontab -e -u www-data

添加一条任务,每15分钟执行一次Nextcloud后台任务。下面nextcloud目录指的是nextcloud的web目录,可按实际情况修改,保存并退出。

*/15  *  *  *  * php -f /nextcloud/cron.php

如果不行,请参照官方的文档:

For some configurations, it might be neccessary to append --define apc.enable_cli=1 to the cron command. Please refer to Memory caching (section APCu).

需要在*/15 * * * * php -f /nextcloud/cron.php 里加上--define apc.enable_cli=1,即:*/15 * * * * php -f /nextcloud/cron.php --define apc.enable_cli=1 (本人亲测可用!)

同时,也可以在命令行下执行一次cron.php校验一下,如没出现任何错误提示,证明命令是正确的。

sudo -u www-data php -f /nextcloud/cron.php

重启cron服务,使其生效。

service cron restart

最后,管理员登录Nextcloud后台,进入【设置】-【基本设置】,把后台任务设为Cron即可。

至此,已成功把Nextcloud后台任务方式设为Cron。