Tôi chỉ có thể vô hiệu hóa updateb?


26

updatedbcần thiết không? Tôi không bao giờ sử dụng locatevà các máy chủ của tôi có xu hướng có hàng tá triệu tệp thường được cập nhật để chạy trong một thời gian dài và tiêu thụ I / O cần thiết bởi MySQL và / hoặc phần mềm khác.

Tôi có thể loại bỏ nó khỏi cron và mong mọi thứ hoạt động không? (bởi tất cả mọi thứ tôi có nghĩa là phần mềm thông thường được tìm thấy trên máy chủ: linux, cpanel, mysql, apache, php, v.v.).

Câu trả lời:


25

Có, bạn có thể vô hiệu hóa nó trong các crons hoặc loại bỏ gói cung cấp updatedb. Trên hệ thống Red Hat, bạn sẽ tiến hành các bước để xác định xem có gì cần thiết trước khi xóa không.

  1. Trước tiên hãy tìm nơi chương trình nằm trên đĩa.

    $ type updatedb
    updatedb is /usr/bin/updatedb
    
  2. Tiếp theo tìm hiểu những gì gói cung cấp updatedb.

    $ rpm -qf /usr/bin/updatedb
    mlocate-0.26-3.fc19.x86_64
    
  3. Xem nếu có yêu cầu mlocate.

    $ rpm -q --whatrequires mlocate
    no package requires mlocate
    
  4. Không có gì yêu cầu nó để bạn có thể loại bỏ các gói.

    $ yum remove mlocate
    

1
rpmcũng có --whatrecommends. Tôi nghĩ Fedora bắt đầu xem xét nó như một khái niệm trong vài năm qua. (Rất lâu sau khi bên debian / ubfox mặc định cài đặt các phụ thuộc "đề xuất" cũng như "yêu cầu").
nguồn

Vậy sau khi gỡ bỏ tôi có thể xóa /var/lib/mlocatekhông?
Ramratan Gupta

1
@RamratanGupta - có
slm

13

Bạn có thể vô hiệu hóa việc quét các thư mục có nhiều tệp ( /var/wwwví dụ) bằng cách chỉnh sửa /etc/updatedb.conftệp cấu hình. Nếu bạn thực sự muốn vô hiệu hóa nó, sau đó chỉ cần loại bỏ cronjob.


5

Loại bỏ nó bằng trình quản lý gói của bạn, nếu một gói khác sử dụng nó, bạn sẽ biết, vì nó phải phụ thuộc vào nó (phụ thuộc gói).

Tôi có một máy chủ với Nginx, php-fpmmysql, nó hoạt động rất đẹp mà không cần updatedb.


Ngoài ra, trong apt bạn có thể sử dụng aptitude remove, aptitude whyhoặc aptitude search '?installed ?recommends(mlocate)'. Tất cả sẽ hiển thị đề xuất phụ thuộc, ngoài những yêu cầu. apt bây giờ cài đặt các gói được đề xuất theo mặc định, vì vậy trong khi chúng không được coi là thiết yếu, chúng cũng có thể được dựa vào để cung cấp một số chức năng phụ rất hữu ích.
nguồn

0

Tôi sẽ không đi xa trên một chi bằng cách nói điều này, nhưng nhiều khả năng nó không được cập nhật đang gây ra vấn đề của bạn. Có thể là một cái gì đó khác mà bạn không muốn, hoặc là một ứng dụng sao lưu mà bạn chưa cấu hình theo 'ý thích' hoặc một số vấn đề bảo mật với cấu trúc nhóm hồ sơ / hệ thống của bạn.

Một trường hợp khác trong đó có vẻ như việc cấp phát bộ nhớ hệ thống đang hoạt động chống lại người dùng là tình huống khi một người 'không biết sắp xếp các hệ thống tệp ảo'. Và đó là booger của vấn đề. Một 'quả bom ảo ảo' có thể nói như vậy.

Điều này khá thường xuyên xảy ra với các ổ USB được định dạng trong fat32 trên hệ thống ext 4, sau đó được chuyển sang hệ thống zfs được thiết lập không đúng với vỏ csh làm vỏ đăng nhập man. Nó tạo ra đệ quy ảo của vấn đề "Hệ thống tệp USB chỉ đọc tệp" trên đĩa và định dạng / gắn ổ đĩa vào vFat từ fat32, từ đó tạo ra một khu vực khối xấu và trích xuất (hầu như di chuyển) một thư mục lên cấp độ thư mục cha, mà gây ra vòng lặp vô hạn! Thư mục không thực sự ở cấp độ phân cấp của cha mẹ. Cú pháp của các nguyên nhân csh là nguyên nhân của việc này. * LƯU Ý: Ổ đĩa chỉ được đọc trên tất cả các hệ thống trừ hệ thống đăng nhập c-shell zfs.

Để vô hiệu hóa hoàn toàn updateb có thể tạo ra logic không liên quan đến cấp phát bộ nhớ và 'hiệu ứng quay lại' .. Nếu bạn đã từng quay lại khi bạn không muốn, bạn biết ý tôi là gì khi dòng lệnh có giá trị hai giờ kịch bản là Fubar-ed vì bạn không phân bổ công việc xử lý vào bộ nhớ.

Bây giờ nếu bạn có hai hoặc nhiều bộ xử lý vật lý (ví dụ: lõi kép trở lên) và ram ddr3, thì bạn vẫn ổn. Miễn là bạn không chạy đồ họa nặng, trong trường hợp đó nếu tải điện đó gây ra sự cố của bạn, thì updateb sẽ là cuối cùng trong danh sách của bạn. Nếu bạn đang cố gắng ngụy trang các chuyển động của mình với hệ thống vì một số lý do thì có nhiều cách khác để giải quyết vấn đề đó thay vì vô hiệu hóa updateb, và trên thực tế, updateb sẽ củng cố hành động của bạn rằng 'không có gì xảy ra' cho đến khi hệ thống của bạn ngụy trang.

Hoàn toàn dựa trên kích thước của tệp nhị phân / usr / bin / updateb và xem xét kiến ​​trúc của giao tiếp tín hiệu / hệ thống với hệ điều hành và Bash có kích thước gấp 10 lần so với dấu gạch ngang được liên kết qua lại hoặc thực hiện cuộc gọi không đồng bộ rất rẻ trên hệ thống.

Nếu bạn đã đăng nhập vào trình bao chạy các tập lệnh tuần tự bạn đã viết và bạn là quản trị viên (ví dụ: sudo), hãy chạy lệnh sau:

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

Sau đó, bạn có thể muốn tạo một biến cục bộ trong tập lệnh của mình (updateb cần hệ thống riêng, hệ thống AKA root / sudo / wheel), ví dụ:

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

echo "Beginning Execution of sequence "

Trong trường hợp đó, chuỗi đang sử dụng STDOUT / STDIN từ các tập lệnh shell khác mà bạn đã viết và đang thực thi dưới dạng các biến trong tập lệnh chính của bạn hoặc nói rằng bạn có gói quản trị viên cá nhân hoặc doanh nghiệp được thiết lập nơi bạn tải lên / tải xuống / cổng từ cdrom hoặc usb hoặc bất cứ điều gì, đó là cực kỳ lớn và có các kịch bản cài đặt cá nhân cho họ, BẠN MUỐN KIẾM cập nhật. Khi shell terminal mở, đó là trường hợp ứng dụng chính của bạn. Các ứng dụng khác có thể / thực hiện chạy không đồng bộ nhưng updateb là một trong những chi phí thấp nhất về tổng thể nhu cầu hệ thống / máy tính. Nhiều lần, đặc biệt là trên bàn lxdm của Enviro và Lxterm (điều đó siêu nhanh), nhưng không chỉ; với việc thêm updateb vào tập lệnh của tôi, hệ thống đã xử lý các lỗi mà các tập tin không tồn tại hoặc đã xảy ra sự cố. Và tôi thích CÁI GÌ!

Shell nhanh hơn hệ thống mà nó quản lý Tôi đảm bảo với bạn rằng!

Trong trường hợp đó, sau đó bạn sẽ gọi biến updateb để khóa chuỗi trước đó vào bộ nhớ, như được hiển thị

echo "Updating local database "

$UPD

echo "Exiting script two "

exit

Bạn có thấy tôi đang nói gì không? Nếu bạn hỏi điều này bởi vì bạn đang chạy thử nghiệm tốc độ thực thi, tức là phong cách Andrew Tanenbaum hơn là có. Khôn ngoan khác sử dụng các công cụ để lợi thế của bạn.


Vấn đề với updateb không phải là CPU hay bộ nhớ, mà là băng thông IO. Trong trường hợp của tôi (một hệ thống có CPU lớn và nhiều bộ nhớ dự phòng), nó sẽ quay ổ cứng của tôi với tốc độ 5 MB / giây trong từng giờ, từng bước một, làm chậm mọi thứ khác phụ thuộc vào ổ đĩa đó. Và khi tôi biết chính xác những gì tôi đang tìm kiếm, chúng là các tệp mới, vì vậy locatekhông hữu ích vì tôi không thể chắc chắn rằng nó được lập chỉ mục. Khi các tập tin cũ hơn, tôi đi fzfvà tìm kiếm mờ.
Davidmh

0

Ít nhất là trong ArchLinux, có vẻ như được bật man-db.timerupdatedb.timerđược bật theo mặc định (nghĩa là: các tệp sau tồn tại), nhưng có 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. [...](đầu ra từ systemctl enable {man-,update}db.timer).

Đây là các liên kết tượng trưng có trong hệ thống tập tin:
/usr/lib/systemd/system/multi-user.target.wants/man-db.timer
/usr/lib/systemd/system/multi-user.target.wants/updatedb.timer

Nó chỉ là một vấn đề đơn giản là loại bỏ chúng.
Tuy nhiên, họ sẽ được tái tạo ở mỗi re / cài đặt / nâng cấp man-db, mlocatebao bì, tương ứng.

Đối với ArchLinux, một cách giải quyết có thể là có một cái móc cho pacman để loại bỏ chúng.
Tuy nhiên, nó sẽ xóa chúng tại mỗi sự kiện như vậy, ngay cả khi bạn muốn chúng được kích hoạt trên các bản nâng cấp.
Trong trường hợp đó, bạn có thể tắt móc khi muốn bật hẹn giờ.
Nhưng, việc kích hoạt bộ hẹn giờ sẽ chỉ có hiệu lực khi cài đặt lại / cài đặt gói, vì không có phần được cấu hình trong các .timertệp đơn vị mặc định để trực tiếp systemctl enablebộ định thời.
Cần có một hướng dẫn ln -s ../man-db.timer /usr/lib/systemd/system/multi-user.target.wants/man-db.timerhoặc ln -s ../updatedb.timer /usr/lib/systemd/system/multi-user.target.wants/updatedb.timerlệnh để kích hoạt bộ định thời / s và xóa liên kết / s để vô hiệu hóa chúng.

Bạn có thể đã ghi đè các đơn vị tùy chỉnh /etc/systemd/system/{man-,update}db.timer, cung cấp WantedBy=multi-user.targettrong [Install]phần để cho phép systemtl enable|disable, nhưng các liên kết /usr/lib/systemd/system/multi-user.target.wants/{man-,update}db.timervẫn sẽ được tạo khi cài đặt lại / cài đặt / nâng cấp, giúp tái tạo hiệu quả các .timers.

Bạn cũng có thể chạy systemctl mask man-db.timer updatedb.timerđể che dấu thời gian.
Ngay cả khi vẫn có thể chạy thủ công systemctl start man-db.service updatedb.serviceđể khởi động các dịch vụ tương ứng, bạn sẽ không thể tự khởi động bộ hẹn giờ, vì bất kỳ lý do gì người dùng sẽ thấy mình muốn / cần phải làm như vậy.
Cách giải quyết này không cho phép ghi đè các /etc/systemd/system/{man-,update}db.timertệp đơn vị tùy chỉnh nếu muốn / cần, vì systemd cần thay thế chúng bằng một liên kết tượng trưng /dev/nullđể biểu thị một đơn vị đeo mặt nạ.

Đắp mặt nạ dường như là giải pháp ít xâm nhập nhất.
Tôi thích xóa thủ công /usr/lib/systemd/system/multi-user.target.wants/{man-,update}db.timersau mỗi lần nâng cấp và ghi đè các tệp đơn vị /etc/systemd/system/{man-,update}db.timercó một [Install]phần WantedBy=multi-user.targetđể bật systemctl/ tắt thủ công.

Thật không may, không có công việc đơn giản nào xung quanh vấn đề này, mà ít nhất, tôi có thể nghĩ ra, tại thời điểm này.
Điều này giả định rằng các gói man-db, mlocatemuốn / cần được giữ trong hệ thống: loại bỏ chúng sẽ không phải là một giải pháp mong muốn / hữu ích.

Cũng thấy điều này: https://www.reddit.com/r/archlinux/comments/36fqzh/updatedbservice_and_mandbservice_increases_boot/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.