【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
相关推荐
Ching·35 分钟前
esp32使用ESP-IDF在Linux下的升级步骤,和遇到的坑Traceback (most recent call last):,及解决
linux·python·esp32·esp_idf升级
子柒s1 小时前
Linux 基础
linux
MC皮蛋侠客2 小时前
Ubuntu安装Mongodb
linux·mongodb·ubuntu
游戏开发爱好者82 小时前
iOS App 电池消耗管理与优化 提升用户体验的完整指南
android·ios·小程序·https·uni-app·iphone·webview
2201_753436952 小时前
ubuntu基础搭建
linux·运维·ubuntu
人生游戏牛马NPC1号2 小时前
学习 Flutter (四):玩安卓项目实战 - 中
android·学习·flutter
莫到空离3 小时前
LVS三种模式实战
linux·服务器·网络
星辰也为你祝福h4 小时前
Android原生Dialog
android
Azxcc04 小时前
Linux内存系统简介
linux·性能优化·内存子系统
CIAS5 小时前
clonezilla 导出自动化恢复iso
linux·windows·clonezilla