【Nextcloud】在 Ubuntu 22.04.3 LTS 上的 Nextcloud Hub 10 (31.0.2) 后台任务cron 的优化

Nextcloud 后台任务 cron 的优化

Nextcloud 优化是个长期的过程,只能遇到问题解决问题了。遇到的问题和解决办法会逐步的编写完善。

伴随着内容增多,并添加更多的功能,访问 Nextcloud 变慢。通过修改PHP 内存限制,得到改善:

系统版本: Ubuntu 22.04

PHP 版本: PHP 8.2

发现

Nextcloud 有个后台执行的cron ,在管理界面中已经设置为系统运行,默认是5分钟执行一次。 后来修改了crontab 中执行的时间为每天2点执行。 但发现系统中Nextcloud 的cron 还是每5分钟执行一次,由于系统内容比较多,我有不断地导入音频文件,看到执行时间比较长,占用资源比较多。 cron 是抓到了,但是是从哪来启动它的呢?

bash 复制代码
top - 10:58:28 up 6 days, 23:14,  2 users,  load average: 1.29, 1.83, 2.12
Tasks: 218 total,   3 running, 215 sleeping,   0 stopped,   0 zombie
%Cpu(s): 26.5 us,  2.5 sy,  0.0 ni, 69.7 id,  0.0 wa,  0.0 hi,  1.3 si,  0.0 st
MiB Mem :  15911.4 total,    680.4 free,   9976.8 used,   5254.3 buff/cache
MiB Swap:   4096.0 total,   2988.2 free,   1107.8 used.   5645.9 avail Mem 

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                                                     
 325905 www       20   0 7993928   7.1g  38124 R 100.0  45.8   8:46.31 php                                                                         
 234112 453       20   0    2320    848    616 S  15.6   0.0 185:31.75 dnsmasq                                                                     
 196668 root      20   0 7803532 982136   3692 S   0.7   6.0  23:01.41 java                                                                        
    971 root      20   0  547840  19524   8560 S   0.3   0.1  12:30.56 fail2ban-server                                                             
   8385 root      39  19   35668   9744    572 S   0.3   0.1  44:12.32 netdata                                                                     
 326292 root      20   0   11040   4352   3596 R   0.3   0.0   0:00.02 top                                                                         
      1 root      20   0  168176  11644   6520 S   0.0   0.1   2:06.88 systemd                                                                     
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.25 kthreadd                                                                    
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp                                                                      
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp                                                                  
      5 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 slub_flushwq                                                                
      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 netns                                                                       
      8 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-events_highpri                                                 
     10 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq                                                                
     11 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_rude_                                                             
     12 root      20   0       0      0      0 S   0.0   0.0   0:00.00 rcu_tasks_trace                                                             
     13 root      20   0       0      0      0 S   0.0   0.0   0:12.82 ksoftirqd/0    
    

原来是 systemd & 优化系统cron

原文 Background jobs

nextcloud-cron.service

bash 复制代码
2222@2222:/etc/systemd/system# more  nextcloud-cron.service 
[Unit]
Description=Nextcloud cron.php job
 
[Service]
User=www
ExecStart=/usr/bin/php -f /www/nextcloud/cron.php
 
[Install]
WantedBy=basic.target

修改为:

bash 复制代码
[Unit]
Description=Nextcloud cron.php job

[Service]
User=www-data
ExecCondition=php -f /var/www/nextcloud/occ status -e
ExecStart=/usr/bin/php -f /var/www/nextcloud/cron.php
KillMode=process
[Install]
WantedBy=basic.target

nextcloudcron.timer

bash 复制代码
[Unit]
Description=Run Nextcloud cron.php every 5 minutes

[Timer]
OnBootSec=5min
OnUnitActiveSec=5min
Unit=nextcloudcron.service

[Install]
WantedBy=timers.target

修改为

bash 复制代码
222@222:/etc/systemd/system# more nextcloudcron.timer 
[Unit]
Description=Run Nextcloud cron.php every 5 minutes

[Timer]
# 每天中午12:00执行
OnCalendar=*-*-* 12:00:00

# 每天晚上20:00-23:59每小时执行(注意:不能直接用20..23语法)
OnCalendar=*-*-* 20:00:00
OnCalendar=*-*-* 21:00:00
OnCalendar=*-*-* 22:00:00
OnCalendar=*-*-* 23:00:00

AccuracySec=1h        

# 关联的服务
Unit=nextcloud-cron.service

# 如果错过时间,尽快补执行
Persistent=true

[Install]
WantedBy=timers.target

优化 Nextcloud 配置

编辑 config/config.php:

php 复制代码
'cronMaxJobs' => 10,  // 减少同时运行的作业数
'cronMaxExecutionTime' => 3600,  // 设置最大执行时间
'filelocking.enabled' => true,  // 确保文件锁定启用

数据库优化

bash 复制代码
sudo -u www php /www/nextcloud/occ db:add-missing-indices
sudo -u www php /www/nextcloud/occ db:convert-filecache-bigint

监控和调试

bash 复制代码
sudo -u www php /www/nextcloud/occ background:cron

优化 PHP 配置

php 复制代码
; 减少内存限制
memory_limit = 128M

; 优化 OPcache
opcache.enable=1
opcache.enable_cli=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.save_comments=1
相关推荐
chlk1231 天前
Linux文件权限完全图解:读懂 ls -l 和 chmod 755 背后的秘密
linux·操作系统
阿巴斯甜1 天前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
舒一笑1 天前
Ubuntu系统安装CodeX出现问题
linux·后端
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
改一下配置文件1 天前
Ubuntu24.04安装NVIDIA驱动完整指南(含Secure Boot解决方案)
linux
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
深紫色的三北六号2 天前
Linux 服务器磁盘扩容与目录迁移:rsync + bind mount 实现服务无感迁移(无需修改配置)
linux·扩容·服务迁移
SudosuBash2 天前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读