ฉันสามารถปิดการใช้งาน updatedb ได้หรือไม่


26

เป็นupdatedbสิ่งที่จำเป็นที่ทั้งหมดหรือไม่ ฉันไม่เคยใช้locateและเซิร์ฟเวอร์ของฉันมักจะมีไฟล์หลายสิบล้านไฟล์ซึ่งโดยปกติจะทำให้ updateb ทำงานเป็นเวลานานและใช้ I / O ที่จำเป็นโดย MySQL และ / หรือซอฟต์แวร์อื่น ๆ

ฉันสามารถลบมันออกจาก cron และคาดหวังว่าทุกอย่างจะทำงานได้หรือไม่ (โดยทุกอย่างฉันหมายถึงซอฟต์แวร์ปกติที่พบในเซิร์ฟเวอร์: linux, cpanel, mysql, apache, php เป็นต้น)

คำตอบ:


25

ใช่คุณสามารถปิดการใช้งานใน crons หรือลบแพคเกจที่ให้updatedbไว้ ในระบบ Red Hat คุณจะทำตามขั้นตอนในการพิจารณาว่ามีอะไรที่จำเป็นต้องใช้ก่อนที่จะทำการลบ

  1. ขั้นแรกให้ค้นหาว่าโปรแกรมนั้นอยู่ที่ใดบนดิสก์

    $ type updatedb
    updatedb is /usr/bin/updatedb
    
  2. updatedbถัดไปหาสิ่งที่แพคเกจให้

    $ rpm -qf /usr/bin/updatedb
    mlocate-0.26-3.fc19.x86_64
    
  3. mlocateดูว่าอะไรที่จำเป็นต้องใช้

    $ rpm -q --whatrequires mlocate
    no package requires mlocate
    
  4. ไม่จำเป็นต้องใช้มันเพื่อให้คุณสามารถลบแพ็คเกจได้

    $ yum remove mlocate
    

1
rpm--whatrecommendsนอกจากนี้ยังมี ฉันคิดว่า Fedora เริ่มมองมันเป็นแนวคิดในช่วงสองสามปีที่ผ่านมา (นานหลังจากฝั่ง debian / ubuntu เริ่มต้นที่การติดตั้ง "แนะนำ" อ้างอิงเช่นเดียวกับคน "ต้อง")
sourcejedi

ดังนั้นหลังจากลบฉันสามารถลบ/var/lib/mlocate?
Ramratan Gupta

1
@RamratanGupta - ใช่
slm

13

คุณสามารถปิดใช้งานการสแกนไดเรกทอรีที่มีไฟล์จำนวนมาก ( /var/wwwตัวอย่าง) โดยการแก้ไข/etc/updatedb.confไฟล์กำหนดค่า หากคุณต้องการปิดการใช้งานจริงๆแล้วเพียงแค่ลบ cronjob


5

ลบมันออกโดยใช้ตัวจัดการแพ็กเกจของคุณหากแพ็กเกจอื่นใช้มันคุณจะรู้เพราะต้องขึ้นอยู่กับมัน (การพึ่งพาแพ็คเกจ)

ฉันมีเซิร์ฟเวอร์ที่มีNginx, php-fpmและและการทำงานโดยไม่ต้องสวยงามmysqlupdatedb


นอกจากนี้ในแพกเกจที่คุณสามารถใช้aptitude remove, หรือaptitude why aptitude search '?installed ?recommends(mlocate)'เหล่านี้ทั้งหมดจะแสดงแนะนำการพึ่งพานอกเหนือไปจากที่จำเป็น ตอนนี้ฉลาดจะติดตั้งแพคเกจที่แนะนำตามค่าเริ่มต้นดังนั้นในขณะที่พวกเขาไม่ถือว่าจำเป็นพวกเขาอาจจะพึ่งพาเพื่อให้ฟังก์ชั่นย่อยที่มีประโยชน์มากบางอย่าง
sourcejedi

0

ฉันไม่ได้ไปไกลขนาดนั้นด้วยการพูดแบบนี้ แต่มีโอกาสมากที่มันจะไม่ได้รับการอัพเดตที่ทำให้เกิดปัญหาของคุณ อาจเป็นอย่างอื่นที่คุณไม่ต้องการไม่ว่าจะเป็นแอปพลิเคชันสำรองที่คุณไม่ได้กำหนดค่าให้กับ 'ความชอบ' หรือปัญหาด้านความปลอดภัยของคุณด้วยโครงสร้างกลุ่มโปรไฟล์ / ระบบของคุณ

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

ค่อนข้างบ่อยเกิดขึ้นกับไดรฟ์ USB ที่จัดรูปแบบใน fat32 บนระบบ ext 4 ที่ถูกถ่ายโอนไปยังระบบ zfs ที่ตั้งค่าอย่างไม่เหมาะสมกับ csh shell เป็น man login shell มันสร้างการเรียกซ้ำเสมือนจริงของปัญหา "ระบบไฟล์ USB อ่านอย่างเดียว - ไฟล์" บนดิสก์และฟอร์แมต / เมานต์ไดรฟ์ไปยัง vFat จาก fat32 ซึ่งจะสร้างเซกเตอร์บล็อกที่ไม่ดีและแยกไดเรกทอรี (จริง ๆ ) ระดับไดเรกทอรีหลักซึ่งทำให้เกิดวงวนไม่สิ้นสุด! ไดเรกทอรีไม่ได้อยู่ในระดับลำดับชั้นของผู้ปกครอง ไวยากรณ์ของสาเหตุ csh เป็นสาเหตุของสิ่งนี้ * หมายเหตุ: ไดรฟ์นั้นอ่านได้ในทุกระบบเท่านั้น แต่เป็นระบบล็อกอิน zfs c-shell

หากต้องการปิดใช้งาน updatedb อย่างสมบูรณ์สามารถสร้าง ill-logic อ้างอิงการจัดสรรหน่วยความจำและ 'เอฟเฟกต์การย้อนกลับ' .. หากคุณเคยย้อนกลับเมื่อคุณไม่ต้องการคุณจะรู้ว่าฉันหมายถึงอะไรเมื่อบรรทัดคำสั่งมูลค่าสองชั่วโมง การเขียนสคริปต์คือ Fubar-ed เพราะคุณไม่ได้จัดสรรการประมวลผลงานของคุณไว้ในหน่วยความจำ

ตอนนี้ถ้าคุณมีตัวประมวลผลทางกายภาพตั้งแต่สองตัวขึ้นไป (เช่นดูอัลคอร์หรือมากกว่า) และ ddr3 ram คุณก็สามารถปรับได้ ตราบใดที่กราฟิกของคุณไม่ทำงานหนักซึ่งในกรณีนี้หาก powerload นั้นทำให้เกิดปัญหาของคุณ updatedb จะอยู่ในรายการของคุณ หากคุณพยายามปิดบังการเคลื่อนไหวของคุณไปยังระบบด้วยเหตุผลบางอย่างแล้วมีวิธีอื่นที่จะทำแทนการปิดการใช้งาน updatedb และในความเป็นจริง updatedb จะทำให้การกระทำของคุณเป็นจริงโดยที่ 'ไม่มีอะไรเกิดขึ้น'

ค่อนข้างตรงไปตรงมากับขนาดของไฟล์ไบนารี / usr / bin / updatedb และพิจารณาสถาปัตยกรรมของการสื่อสารสัญญาณ / ระบบที่มีในระบบปฏิบัติการและ Bash นั้นมีขนาดเป็น 10 เท่าของขนาดของเชลล์ที่เชื่อมโยงซึ่งกันและกัน ราคาไม่แพงมากในระบบ

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

~$ sudo bash
:~# ./script.sh

จากนั้นคุณอาจต้องการสร้างตัวแปรท้องถิ่นภายในสคริปต์ของคุณ (updatedb ต้องการสิทธิ์ของระบบ, รูท AKA / sudo / wheel), เช่น:

#! /bin/sh
# Create local variables
UPD="updatedb"

echo "Beginning Execution of sequence "

ในกรณีนี้ลำดับจะใช้ STDOUT / STDIN จากเชลล์สคริปต์อื่น ๆ ที่คุณเขียนและใช้งานเป็นตัวแปรในสคริปต์หลักของคุณหรือว่าคุณมีแพ็คเกจผู้ดูแลระบบส่วนบุคคลหรือธุรกิจที่คุณอัพโหลด / ดาวน์โหลด / พอร์ตจาก cdrom หรือ ยูเอสบีหรืออะไรก็ตามที่มีขนาดใหญ่มากและมีสคริปต์การติดตั้งส่วนตัวสำหรับพวกเขา เมื่อเทอร์มินัลเชลล์เปิดขึ้นนั่นคือแอปพลิเคชันหลักของคุณ แอปพลิเคชั่นอื่น ๆ สามารถ / ทำงาน asyncronously แต่ updateb เป็นหนึ่งในราคาที่ถูกที่สุดในแง่ของความต้องการระบบ / การคำนวณโดยรวม หลายครั้งโดยเฉพาะกับ lxdm Desk Enviro's และ Lxterm (สิ่งนั้นเร็วมาก) แต่ไม่ใช่เพียงอย่างเดียว เมื่อเพิ่มการอัปเดตไปยังสคริปต์ของฉันแล้วระบบได้ยิงฉันถึงข้อผิดพลาดที่ไฟล์ไม่มีอยู่หรือมีบางอย่างผิดปกติเกิดขึ้น และฉันชอบอะไร!

เชลล์นั้นเร็วกว่าระบบที่จัดการฉันรับประกันได้ว่า!

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

echo "Updating local database "

$UPD

echo "Exiting script two "

exit

คุณเห็นสิ่งที่ฉันพูดหรือไม่ หากคุณถามสิ่งนี้เพราะคุณใช้การทดสอบความเร็วในการดำเนินการนั่นคือสไตล์ Andrew Tanenbaum มากกว่าที่คิดไว้ ฉลาดอื่น ๆ ใช้เครื่องมือเพื่อประโยชน์ของคุณ


ปัญหาเกี่ยวกับ updatedb ไม่ใช่ CPU หรือหน่วยความจำ แต่เป็นแบนด์วิดท์ IO ในกรณีของฉัน (ระบบที่มี CPU ที่ยอดเยี่ยมและหน่วยความจำเหลือเฟือ) มันกำลังหมุนฮาร์ดไดรฟ์ของฉันที่ 5 MB / s เป็นเวลาหนึ่งชั่วโมงละหนึ่งช้าลงทุกอย่างที่ขึ้นอยู่กับไดรฟ์นั้น และเมื่อฉันรู้ว่าฉันกำลังมองหาอะไรพวกเขาเป็นไฟล์ใหม่ดังนั้นจึงlocateไม่มีประโยชน์เพราะฉันไม่แน่ใจว่ามันจะถูกจัดทำดัชนี เมื่อไฟล์เก่าฉันจะfzfค้นหาและคลุมเครือ
Davidmh

0

อย่างน้อยก็ใน ArchLinux ก็ปรากฏว่าman-db.timerและupdatedb.timerมีการใช้งานโดยค่าเริ่มต้น (เช่น: แฟ้มต่อไปนี้อยู่) แต่มีno installation config (WantedBy, RequiredBy, Also, Alias settings in the [Install] section, and DefaultInstance for template units). This means they are not meant to be enabled using systemctl. [...](เอาท์พุทจากsystemctl enable {man-,update}db.timer)

นี่คือลิงก์สัญลักษณ์ที่มีอยู่ในระบบไฟล์:
/usr/lib/systemd/system/multi-user.target.wants/man-db.timer
/usr/lib/systemd/system/multi-user.target.wants/updatedb.timer

มันควรจะเป็นเรื่องของการลบพวกเขา
แต่พวกเขาจะได้รับการสร้างขึ้นในแต่ละ RE / ติดตั้ง / อัพเกรดของman-db, mlocateแพคเกจตามลำดับ

สำหรับ ArchLinux วิธีแก้ปัญหาที่เป็นไปได้คือมีตะขอสำหรับ pacman เพื่อลบออก
อย่างไรก็ตามมันจะลบออกในแต่ละเหตุการณ์แม้ว่าคุณจะต้องการให้เปิดใช้งานในการอัปเกรดก็ตาม
ในกรณีนี้คุณสามารถปิดการใช้งานของ hook เมื่อต้องการเปิดใช้งานตัวจับเวลา
แต่การเปิดใช้งานตัวจับเวลาจะมีผลเฉพาะเมื่อติดตั้งใหม่ / อัพเกรด / แพคเกจเนื่องจากไม่มีส่วนที่กำหนดค่าไว้ใน.timerไฟล์หน่วยเริ่มต้นไปsystemctl enableยังตัวจับเวลาโดยตรง
คู่มือln -s ../man-db.timer /usr/lib/systemd/system/multi-user.target.wants/man-db.timerหรือln -s ../updatedb.timer /usr/lib/systemd/system/multi-user.target.wants/updatedb.timerคำสั่งจะต้องเปิดใช้งานตัวจับเวลา / s และลบลิงค์ / s เพื่อปิดการใช้งาน

คุณอาจมีการแทนที่หน่วยที่กำหนดเอง/etc/systemd/system/{man-,update}db.timerโดยให้WantedBy=multi-user.targetใน[Install]ส่วนที่อนุญาตsystemtl enable|disableแต่ลิงก์/usr/lib/systemd/system/multi-user.target.wants/{man-,update}db.timerจะยังคงถูกสร้างขึ้นใหม่ / ติดตั้ง / อัปเกรดเปิดใช้งาน.timers อีกครั้งอย่างมีประสิทธิภาพ

คุณสามารถเรียกใช้systemctl mask man-db.timer updatedb.timerเพื่อปกปิดตัวนับได้
แม้ว่ามันจะยังคงเป็นไปได้ที่จะเรียกใช้ด้วยตนเองsystemctl start man-db.service updatedb.serviceเพื่อเริ่มบริการที่เกี่ยวข้องคุณจะไม่สามารถเริ่มจับเวลาด้วยตนเองไม่ว่าด้วยเหตุผลใดก็ตามที่ผู้ใช้จะพบว่าตัวเองต้องการ / จำเป็นต้องทำเช่นนั้น
วิธีแก้ปัญหานี้ไม่อนุญาตให้มีการแทนที่/etc/systemd/system/{man-,update}db.timerไฟล์หน่วยงานที่กำหนดเองหากต้องการ / จำเป็นเนื่องจาก systemd จำเป็นต้องแทนที่ไฟล์เหล่านั้นด้วยลิงก์สัญลักษณ์/dev/nullเพื่อแสดงถึงยูนิตที่ถูกปกปิด

การปิดบังดูเหมือนจะเป็นวิธีแก้ปัญหาที่รบกวนน้อยที่สุด
ฉันชอบลบออกด้วยตนเอง/usr/lib/systemd/system/multi-user.target.wants/{man-,update}db.timerหลังจากการอัพเกรดแต่ละครั้งและการแทนที่ไฟล์หน่วยที่/etc/systemd/system/{man-,update}db.timerมี[Install]ส่วนด้วยWantedBy=multi-user.targetเพื่อเปิดใช้systemctlงานการเปิด / ปิดการทำงานด้วยตนเอง

น่าเสียดายที่ตอนนี้ยังไม่มีวิธีแก้ปัญหาง่ายๆที่อย่างน้อยฉันก็นึกได้
นี้อนุมานว่าแพคเกจman-db, mlocateจะต้องการ / ความจำเป็นที่จะต้องเก็บไว้ติดตั้งในระบบ: ลบพวกเขาจะไม่เป็นที่ต้องการ / วิธีการแก้ปัญหาที่มีประโยชน์

ดูสิ่งนี้ด้วย: https://www.reddit.com/r/archlinux/comments/36fqzh/updatedbservice_and_mandbservice_increases_boot/

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.