แก้ไขปัญหา Cron Job ของ Nextcloud ไม่ทำงานโดยอัตโนมัติด้วย systemd

เพื่อให้ระบบ systemd เรียกใช้งานงานเบื้องหลังของ Nextcloud โดยอัตโนมัติ ให้กำหนดค่าบริการแบบครั้งเดียว (one-shot service) ที่ทำงานcron.phpในฐานะผู้ใช้เว็บเซิร์ฟเวอร์ จากนั้นเปิดใช้งานตัวจับเวลาที่จะเริ่มต้นบริการนั้นทุกๆ ห้านาที การตรวจสอบที่สำคัญคือ: ตัวจับเวลาเปิดใช้งานอยู่และมีเวลาทำงานครั้งถัดไป บริการชี้ไปยังพาธ Nextcloud และ PHP ที่ถูกต้อง และบันทึกการทำงานของบริการแสดงว่าเสร็จสิ้นอย่างสำเร็จ บริการแบบครั้งเดียวอาจแสดงสถานะ "ไม่ทำงาน (dead)" ระหว่างการทำงานแต่ละครั้ง ซึ่งเป็นเรื่องปกติหลังจากที่บริการเสร็จสิ้นแล้ว

การตั้งค่านี้ใช้สำหรับการติดตั้ง Nextcloud แบบทั่วไปบน Ubuntu โดยใช้ systemd โดยมีไฟล์ Nextcloud อยู่บนโฮสต์ หาก Nextcloud ทำงานอยู่ภายใน Docker, Snap หรืออุปกรณ์สำเร็จรูป เช่น Nextcloud All-in-One ให้ใช้วิธีการกำหนดเวลาที่ระบุไว้ในเอกสารของระบบปฏิบัติการนั้นๆ แทนการชี้หน่วยโฮสต์ไปยังพาธเฉพาะคอนเทนเนอร์ ตัวอย่างด้านล่างใช้/var/www/nextcloudและwww-data; โปรดแทนที่ด้วยพาธการติดตั้งจริงและผู้ใช้ HTTP บนเซิร์ฟเวอร์ของคุณ

สิ่งที่ตัวจับเวลาควรทำได้

Nextcloud cron.phpจะรันงานพื้นหลังที่จัดคิวไว้ เช่น การบำรุงรักษาและงานของแอป ตัวจับเวลาของ systemd เปรียบเสมือนนาฬิกา ส่วนบริการคือคำสั่งที่จะทำงานเมื่อเวลาหมดลง คุณจำเป็นต้องมีทั้งสองอย่าง การสร้างไฟล์โดยไม่เปิดใช้งานตัวจับเวลาจะทำให้กำหนดการไม่ทำงาน ในขณะที่การเปิดใช้งานตัวจับเวลาที่ชี้ไปยังพาธ PHP หรือ Nextcloud ที่ไม่ถูกต้องอาจทำให้การทำงานล้มเหลวซ้ำๆ

Nextcloud แนะนำให้ใช้ cron ของระบบสำหรับงานพื้นหลังในสภาพแวดล้อมการผลิต คู่มือการดูแลระบบฉบับปัจจุบันยังระบุถึงตัวจับเวลา systemd เป็นทางเลือกอีกด้วย ตัวอย่างกำหนดการจะเริ่มทำงานห้านาทีหลังจากบูตเครื่อง และกำหนดให้ทำงานอีกครั้งห้านาทีหลังจากเปิดใช้งานบริการแต่ละครั้ง ซึ่งจะช่วยหลีกเลี่ยงการพึ่งพาผู้ใช้ในการเข้าถึงเว็บอินเทอร์เฟซ

1. ยืนยันเส้นทางการติดตั้ง ผู้ใช้ และ PHP CLI

/var/www/nextcloudก่อนแก้ไขหน่วยต่างๆ ให้ค้นหาไดเร็กทอรี Nextcloud ที่แท้จริงและตรวจสอบว่าการติดตั้งเว็บเซิร์ฟเวอร์ต้องการคำสั่ง PHP ใด โดยทั่วไปแล้ว ในการติดตั้ง Ubuntu จากไฟล์เก็บถาวร เส้นทางอาจเป็น ` www-data/etc/nextcloud.com/nextcloud /usr/bin/php...

ls -l /var/www/nextcloud/cron.php
command -v php
php -v

หากไดเร็กทอรี Nextcloud ของคุณอยู่ที่อื่น ให้แทนที่ไดเร็กทอรีนั้นในคำสั่งหน่วยทั้งสองด้านล่าง หากเว็บเซิร์ฟเวอร์ใช้ PHP เวอร์ชันแยกต่างหาก ให้ใช้ไฟล์ปฏิบัติการ CLI ของเวอร์ชันนั้นในExecStartและExecConditionบริการ systemd ไม่ได้สืบทอด PATH หรือสภาพแวดล้อมจากเชลล์แบบโต้ตอบ ดังนั้นเส้นทางที่ระบุอย่างชัดเจนจึงน่าเชื่อถือกว่า

ทดสอบการตรวจสอบสถานะภายใต้ผู้ใช้คนเดียวกันกับที่ systemd จะใช้:

sudo -u www-data /usr/bin/php -f /var/www/nextcloud/occ status -e

ควรรันคำสั่ง ของ Nextcloud occโดยใช้ผู้ใช้ HTTP เพื่อรักษาสิทธิ์การเป็นเจ้าของไฟล์และสิทธิ์การเข้าถึงที่ถูกต้อง หากการทดสอบนี้รายงานข้อผิดพลาด PHP โหมดบำรุงรักษา หรือไฟล์หาย ให้แก้ไขปัญหานั้นก่อน ตัวจับเวลาไม่สามารถชดเชยความล้มเหลวของคำสั่ง Nextcloud ได้

2. สร้างบริการแบบครั้งเดียวจบ

สร้าง/etc/systemd/system/nextcloudcron.service:

sudo nano /etc/systemd/system/nextcloudcron.service

เข้าสู่หน่วยนี้ โดยปรับเส้นทางและผู้ใช้หากการติดตั้งของคุณแตกต่างออกไป:

[Unit]
Description=Nextcloud cron.php job

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

ExecConditionตรวจสอบว่า Nextcloud ทำงานตามปกติหรือไม่ก่อนที่จะเริ่มงานเบื้องหลัง หากเงื่อนไขไม่เป็นไปตามที่กำหนด systemd จะข้ามการทำงาน ตรวจสอบบันทึกเพื่อดูสาเหตุKillMode=processอนุญาตให้โปรแกรมภายนอกที่เริ่มต้นโดยงานเบื้องหลังทำงานต่อหลังจากกระบวนการ cron หลักสิ้นสุดลง ตัวอย่าง Nextcloud ปัจจุบันไม่จำเป็นต้องมี[Install]ส่วนนี้ในไฟล์บริการนี้

การใช้งาน/usr/bin/phpนั้นเหมาะสมเฉพาะเมื่อเป็นตัวแปลภาษา CLI ที่ถูกต้องบนเซิร์ฟเวอร์ของคุณเท่านั้น ตัวอย่างเช่น ที่เก็บ PHP แบบกำหนดเองอาจติดตั้งไบนารีที่มีเวอร์ชันเฉพาะ ใช้เวอร์ชัน PHP ที่เข้ากันได้เดียวกันกับที่ Nextcloud ต้องการและที่การกำหนดค่าเว็บเซิร์ฟเวอร์ใช้

3. สร้างตัวจับเวลา

สร้าง/etc/systemd/system/nextcloudcron.timer:

sudo nano /etc/systemd/system/nextcloudcron.timer

เพิ่ม:

[Unit]
Description=Run Nextcloud cron.php every 5 minutes

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

[Install]
WantedBy=timers.target

OnBootSecตั้งเวลาให้ทำงานครั้งแรกห้านาทีหลังจากที่ systemd เริ่มทำงานเมื่อบูตเครื่องOnUnitActiveSecและตั้งเวลาให้ทำงานอีกครั้งห้านาทีหลังจากที่บริการถูกเปิดใช้งานครั้งล่าสุด ตัวจับเวลาไม่เหมือนกับบริการ: ต้องเปิดใช้งานและเริ่มต้น.timerหน่วยเพื่อให้การตั้งเวลาทำงานโดยอัตโนมัติ

4. รีโหลด systemd และเปิดใช้งานตัวจับเวลา

สั่งให้ systemd อ่านไฟล์หน่วยใหม่ จากนั้นเปิดใช้งานและเริ่มตัวจับเวลาด้วยคำสั่งเดียว:

sudo systemctl daemon-reload
sudo systemctl enable --now nextcloudcron.timer

ตรวจสอบตัวจับเวลา:

systemctl status nextcloudcron.timer
systemctl list-timers --all | grep nextcloudcron

ตัวจับเวลาควรถูกโหลดและทำงานอยู่ และlist-timersควรแสดงเวลาในอนาคตภายใต้ปุ่มถัดไป หากตัวจับเวลาถูกปิดใช้งาน ไม่ถูกโหลด หรือไม่มีการเปิดใช้งานครั้งต่อไป โปรดยืนยันว่าชื่อไฟล์ลงท้ายด้วย ส่วน .timerนั้น[Install]มีWantedBy=timers.targetและคุณได้เรียกใช้คำสั่งdaemon-reloadหลังจากบันทึกไฟล์แล้ว

5. ดำเนินการทดสอบหนึ่งครั้งและตรวจสอบผลลัพธ์

คุณสามารถเริ่มใช้งานบริการได้หนึ่งครั้งโดยไม่ต้องรอให้ตัวจับเวลาทำงานอีกครั้ง:

sudo systemctl start nextcloudcron.service
sudo systemctl status nextcloudcron.service
sudo journalctl -u nextcloudcron.service -n 50 --no-pager

ตรวจสอบผลลัพธ์ของบริการและข้อผิดพลาด PHP หรือ Nextcloud ใดๆ หลังจากคำสั่งเสร็จสิ้นnextcloudcron.serviceอาจกลับไปยังสถานะเดิมinactive (dead)เนื่องจากเป็นงานที่ทำเพียงครั้งเดียว ซึ่งนั่นไม่ได้หมายความว่างานล้มเหลว ตัวจับเวลาควรยังคงทำงานและกำหนดเวลาการทำงานครั้งต่อไป บันทึกควรแสดงว่าการทำงานครั้งก่อนเสร็จสิ้นอย่างสำเร็จหรือไม่

ในการตั้งค่าการดูแลระบบ Nextcloud ให้เปิดพื้นที่สถานะงานเบื้องหลังและตรวจสอบให้แน่ใจว่าเวลาการดำเนินการงานครั้งล่าสุดเลื่อนไปข้างหน้าหลังจากที่ตัวจับเวลาทำงาน คำเตือนภาพรวมควรหายไปเมื่อ Nextcloud ตรวจพบกิจกรรมเบื้องหลังล่าสุด รออย่างน้อยหนึ่งช่วงเวลาหลังจากเปิดใช้งานตัวจับเวลาก่อนที่จะสรุปว่ากำหนดการไม่ได้ทำงาน

วินิจฉัยรูปแบบความล้มเหลวที่พบบ่อย

สิ่งที่คุณเห็นสิ่งที่ต้องตรวจสอบขั้นตอนต่อไป
ตัวจับเวลา "ไม่ทำงาน" หรือถูกปิดใช้งานไม่ว่าตัวจับเวลาจะถูกเปิดใช้งานและเริ่มทำงานหรือไม่รันsudo systemctl enable --now nextcloudcron.timerแล้วตรวจสอบsystemctl list-timers
ตัวจับเวลาทำงานอยู่ แต่บริการล้มเหลวบันทึกการบริการ, ไฟล์ปฏิบัติการ PHP, เส้นทาง Nextcloud และผู้ใช้บริการเรียกใช้การทดสอบสถานะโดยwww-dataแก้ไขข้อผิดพลาด PHP หรือข้อผิดพลาดเกี่ยวกับสิทธิ์การเข้าถึงไฟล์ที่พบเป็นครั้งแรก
บริการนี้จะไม่ได้ใช้งานระหว่างการทำงานแต่ละครั้งเวลาถัดไปของตัวจับเวลาและบันทึกประจำวันสุดท้ายของบริการหากบริการปิดตัวลงอย่างสำเร็จและตัวจับเวลายังคงทำงานอยู่ ถือเป็นเรื่องปกติสำหรับอุปกรณ์แบบใช้งานครั้งเดียว
บริการหยุดทำงานโดยไม่ทำการประมวลผลcron.phpผลลัพธ์ExecConditionและสถานะว่า Nextcloud อยู่ในโหมดบำรุงรักษาหรือไม่แก้ไขข้อผิดพลาดที่เกิดขึ้นและตรวจสอบสถานะ Nextcloud ก่อนเริ่มงานด้วยตนเองอีกครั้ง
หน้าผู้ดูแลระบบยังคงรายงานว่า cron ยังไม่ได้ทำงานไม่ว่าบริการจะเรียกใช้อินสแตนซ์ที่ถูกต้องหรือไม่ และเวลาการดำเนินการครั้งล่าสุดจะเปลี่ยนแปลงไปหรือไม่รอจนครบช่วงเวลาที่กำหนดไว้ ตรวจสอบบันทึก และตรวจสอบให้แน่ใจว่าคุณกำลังตรวจสอบการติดตั้ง Nextcloud เดียวกัน

สำหรับรายละเอียดเพิ่มเติม โปรดตรวจสอบบันทึกการให้บริการล่าสุดและไฟล์บันทึกของ Nextcloud:

sudo journalctl -u nextcloudcron.service --since "30 minutes ago" --no-pager
sudo -u www-data /usr/bin/php -f /var/www/nextcloud/occ background-job:list

รายการงานแสดงงานที่ลงทะเบียนไว้ แต่ไม่ใช่หลักฐานยืนยันว่าตัวจับเวลาทำงานอยู่จริง ควรใช้เวลาการทำงานครั้งล่าสุดและครั้งถัดไปของตัวจับเวลา บันทึกการบริการ และตัวบ่งชี้การทำงานครั้งล่าสุดของ Nextcloud ร่วมกัน

ควรใช้ตัวกำหนดตารางเวลาแบบอื่นเมื่อใด

ตัวจับเวลาของ Systemd ทำงานได้ดีเมื่อเซิร์ฟเวอร์ใช้ Systemd และคุณต้องการกำหนดตารางเวลาแบบโลคอลที่จัดการโดยบริการ หากคุณใช้งานเดมอน cron มาตรฐานอยู่แล้วและสามารถตรวจสอบ crontab ได้ การเพิ่มรายการ cron ของระบบที่เรียกใช้แบบเดียวกันcron.phpก็ได้www-dataรับการสนับสนุนเช่นกัน อย่ากำหนดตารางเวลาทั้งสองวิธีสำหรับอินสแตนซ์ Nextcloud เดียวกัน การเรียกใช้งานที่ซ้ำซ้อนอาจสิ้นเปลืองทรัพยากรและทำให้การแก้ไขปัญหายุ่งยากขึ้น

การกำหนดเวลาด้วย AJAX ขึ้นอยู่กับจำนวนผู้ใช้ที่เข้าชม Nextcloud และมีความน่าเชื่อถือน้อยกว่าสำหรับเซิร์ฟเวอร์ที่มีการใช้งานมากหรือมีผู้ใช้หลายคน การเรียกใช้ Webcron cron.phpผ่าน HTTP อาจเหมาะสมสำหรับอินสแตนซ์ขนาดเล็กมากที่ไม่สามารถเข้าถึงระบบได้ แต่ Nextcloud ระบุว่าการดำเนินการบนเว็บจำกัดปริมาณงานที่สามารถดำเนินการได้ต่อการเรียกใช้หนึ่งครั้ง หาก Nextcloud ถูกบรรจุอยู่ในคอนเทนเนอร์หรือได้รับการจัดการโดยอุปกรณ์ ให้ใช้ตัวกำหนดเวลาหรือการกำหนดค่าคอนเทนเนอร์ที่รองรับ บริการโฮสต์ที่ใช้/var/www/nextcloudจะไม่ทำงานหากไม่มีเส้นทางนั้นอยู่ในโฮสต์

การตั้งค่าที่ดีควรมีตัวจับเวลาที่เปิดใช้งานพร้อมเวลา NEXT ที่เกิดขึ้นซ้ำๆ การทำงานของบริการที่เสร็จสมบูรณ์โดยไม่มีข้อผิดพลาด PHP และเวลาการทำงานครั้งล่าสุดของ Nextcloud ที่ก้าวหน้าไปเรื่อยๆ หากทั้งสามอย่างนี้เป็นจริง แต่ภารกิจของแอปพลิเคชันบางอย่างยังคงดูเหมือนล่าช้า ตัวกำหนดเวลาอาจกำลังทำงานอยู่ขณะที่งานนั้นรอการกำหนดเวลาของตัวเอง ช่วงเวลาการบำรุงรักษา หรือเงื่อนไขคิว ตรวจสอบงานนั้นแยกต่างหากก่อนที่จะเปลี่ยนช่วงเวลาของตัวจับเวลา

เอกสารอ้างอิงอย่างเป็นทางการ

ฝากความเห็น

10 เครื่องมือ Ping Sweep ที่ดีที่สุดสำหรับการค้นหาอุปกรณ์ในเครือข่ายของคุณ

10 เครื่องมือ Ping Sweep ที่ดีที่สุดสำหรับการค้นหาอุปกรณ์ในเครือข่ายของคุณ

เปรียบเทียบเครื่องมือสแกน Ping 10 ตัว สำหรับการค้นหาเครือข่าย LAN อย่างรวดเร็ว การสแกนข้ามแพลตฟอร์ม และการจัดการที่อยู่ IP เรียนรู้ว่าการสแกน Ping สามารถบอกอะไรคุณได้บ้าง และบอกอะไรไม่ได้บ้าง

6 เครื่องมือบริหารจัดการเครือข่ายที่ดีที่สุดสำหรับการติดตามประสิทธิภาพ

6 เครื่องมือบริหารจัดการเครือข่ายที่ดีที่สุดสำหรับการติดตามประสิทธิภาพ

เปรียบเทียบเครื่องมือบริหารจัดการเครือข่าย 6 ชนิดสำหรับการตรวจสอบประสิทธิภาพ รวมถึงการครอบคลุมของ SNMP, การทำแผนที่, การแจ้งเตือน, รูปแบบการใช้งาน และข้อดีข้อเสียด้านต้นทุน

โปรแกรมวิเคราะห์ Wi-Fi ที่ดีที่สุดสำหรับ Windows, iOS และ Android

โปรแกรมวิเคราะห์ Wi-Fi ที่ดีที่สุดสำหรับ Windows, iOS และ Android

เปรียบเทียบแอปวิเคราะห์ Wi-Fi สำหรับ Windows, iPhone และ Android ซึ่งรวมถึงเครื่องมือสำหรับตรวจสอบความแออัดของช่องสัญญาณ การครอบคลุมสัญญาณ แผนที่ความร้อน และการแก้ไขปัญหาเครือข่าย

Ping Monitor: 7 เครื่องมือโอเพนซอร์สฟรีสำหรับตรวจสอบความพร้อมใช้งานของเครือข่าย

Ping Monitor: 7 เครื่องมือโอเพนซอร์สฟรีสำหรับตรวจสอบความพร้อมใช้งานของเครือข่าย

เปรียบเทียบโปรแกรมตรวจสอบค่า Ping แบบโอเพนซอร์สฟรี 7 ตัว ตั้งแต่ชุดโปรแกรมเครือข่ายแบบครบวงจรไปจนถึงโปรแกรมตรวจสอบความหน่วงแฝงโดยเฉพาะ และเลือกโปรแกรมที่เหมาะสมที่สุดตามความพร้อมใช้งาน การสูญเสียแพ็กเก็ต และประวัติการใช้งาน

QoS ในระบบเครือข่าย: คุณภาพของบริการ (Quality of Service) ทำอะไร และทำงานอย่างไร

QoS ในระบบเครือข่าย: คุณภาพของบริการ (Quality of Service) ทำอะไร และทำงานอย่างไร

เรียนรู้ความหมายของ QoS ในระบบเครือข่าย วิธีที่การกำหนดค่า DSCP และคิวการรับส่งข้อมูลจัดลำดับความสำคัญของเสียง วิดีโอ และแอปพลิเคชันทางธุรกิจ และสิ่งที่ QoS แก้ไขไม่ได้

7 เครื่องมือจัดการที่อยู่ IP ที่ดีที่สุดสำหรับทีมเครือข่าย

7 เครื่องมือจัดการที่อยู่ IP ที่ดีที่สุดสำหรับทีมเครือข่าย

เปรียบเทียบเครื่องมือจัดการที่อยู่ IP เจ็ดแบบ สำหรับการค้นหาซับเน็ต การประสานงาน DNS และ DHCP การสำรวจเครือข่าย และ IPAM แบบโอเพนซอร์ส

แนวทางปฏิบัติที่ดีที่สุดสำหรับการตรวจสอบเครือข่าย: สิ่งที่ควรติดตามและเครื่องมือที่ควรใช้งาน

แนวทางปฏิบัติที่ดีที่สุดสำหรับการตรวจสอบเครือข่าย: สิ่งที่ควรติดตามและเครื่องมือที่ควรใช้งาน

สร้างระบบตรวจสอบเครือข่ายที่ใช้งานได้จริง พร้อมการครอบคลุมอุปกรณ์ที่ชัดเจน ตัวชี้วัดประสิทธิภาพที่เป็นประโยชน์ การแจ้งเตือนที่นำไปปฏิบัติได้จริง และการเปรียบเทียบระหว่าง SolarWinds NPM, PRTG และ OpManager

10 เครื่องมือสแกนเครือข่ายที่ดีที่สุดสำหรับการค้นหาอุปกรณ์และที่อยู่ IP

10 เครื่องมือสแกนเครือข่ายที่ดีที่สุดสำหรับการค้นหาอุปกรณ์และที่อยู่ IP

เปรียบเทียบเครื่องมือสแกนเครือข่ายสำหรับการค้นหาอุปกรณ์อย่างรวดเร็ว การสแกน IP ข้ามแพลตฟอร์ม และระบบจัดการ IP ระดับองค์กร พร้อมคำแนะนำในการเลือกใช้แต่ละตัวเลือกให้เหมาะสมกับเครือข่ายของคุณ

วิธีใช้ Nmap สำหรับ Traceroute และอ่านเส้นทางเครือข่าย

วิธีใช้ Nmap สำหรับ Traceroute และอ่านเส้นทางเครือข่าย

ใช้ตัวเลือก --traceroute ของ Nmap เพื่อแมปฮอปไปยังโฮสต์ที่ได้รับอนุญาต ทำความเข้าใจเอาต์พุตของฮอปและ RTT และแก้ไขปัญหาการตอบสนองที่หายไปโดยไม่ต้องสแกนมากเกินไป

10 เครื่องมือสแกนและวิเคราะห์ไร้สายที่ดีที่สุดสำหรับ Windows, iOS และ Android

10 เครื่องมือสแกนและวิเคราะห์ไร้สายที่ดีที่สุดสำหรับ Windows, iOS และ Android

เปรียบเทียบเครื่องมือสแกนและวิเคราะห์เครือข่ายไร้สาย 10 รายการสำหรับ Windows, iOS และ Android พร้อมคำอธิบายที่ชัดเจนเกี่ยวกับช่องสัญญาณ Wi-Fi แผนที่ครอบคลุม การตรวจสอบ LAN และข้อจำกัดของแต่ละแพลตฟอร์ม