Czy mogę po prostu wyłączyć updatedb?


26

Czy updatedbw ogóle jest to konieczne? Nigdy nie używam, locatea moje serwery mają zwykle dziesiątki milionów plików, co zwykle sprawia, że ​​updatedb działa przez długi czas i zużywa operacje we / wy potrzebne przez MySQL i / lub inne oprogramowanie.

Czy mogę po prostu usunąć go z crona i oczekiwać, że wszystko zadziała? (przez wszystko rozumiem zwykłe oprogramowanie znalezione na serwerze: linux, cpanel, mysql, apache, php itp.).

Odpowiedzi:


25

Tak, możesz go wyłączyć w cronach lub usunąć pakiet, który zapewnia updatedb. W systemie Red Hat należy wykonać kroki w celu ustalenia, czy coś wymaga tego przed usunięciem.

  1. Najpierw dowiedz się, gdzie program znajduje się na dysku.

    $ type updatedb
    updatedb is /usr/bin/updatedb
    
  2. Następnie dowiedz się, co zapewnia pakiet updatedb.

    $ rpm -qf /usr/bin/updatedb
    mlocate-0.26-3.fc19.x86_64
    
  3. Sprawdź, czy coś wymaga mlocate.

    $ rpm -q --whatrequires mlocate
    no package requires mlocate
    
  4. Nic tego nie wymaga, abyś mógł usunąć paczkę.

    $ yum remove mlocate
    

1
rpmteż ma --whatrecommends. Myślę, że Fedora zaczęła postrzegać to jako koncepcję w ciągu ostatnich kilku lat. (Długo po stronie debian / ubuntu domyślnie instalowano zależności „poleca” i „wymaga”).
sourcejedi

więc po usunięciu mogę usunąć /var/lib/mlocate?
Ramratan Gupta,

1
@RamratanGupta - tak
slm

13

Możesz wyłączyć skanowanie katalogów zawierających wiele plików ( /var/wwwna przykład), edytując /etc/updatedb.confplik konfiguracyjny. Jeśli naprawdę chcesz to wyłączyć, po prostu usuń cronjob.


5

Usuń go za pomocą menedżera pakietów, jeśli będziesz wiedział, że inny pakiet go używa, ponieważ musi to zależeć (zależność pakietu).

Mam serwer z Nginx, php-fpmi mysql, i to działa pięknie bez updatedb.


Dodatkowo, w apt można użyć aptitude remove, aptitude whylub aptitude search '?installed ?recommends(mlocate)'. Wszystkie pokażą zależności, oprócz tych wymaganych. apt instaluje teraz domyślnie zalecane pakiety, więc chociaż nie są one uważane za niezbędne, można na nich polegać, aby zapewnić bardzo przydatną podfunkcję.
sourcejedi

0

Nie zamierzam zbytnio mówić o kończynie, mówiąc to, ale bardziej niż prawdopodobne, że nie jest aktualizowana, co powoduje problemy. Prawdopodobnie coś, czego nie chcesz, albo aplikacja do tworzenia kopii zapasowych, której nie skonfigurowałeś do swoich upodobań, albo jakiś problem dotyczący bezpieczeństwa w strukturze profilu / grupy systemów.

Innym przypadkiem, w którym wydaje się, że przydział pamięci systemowej działa przeciwko użytkownikowi, jest scenariusz, w którym „nieświadomie układa się w wirtualne systemy plików”. I to jest booger problemu. „Wirtualna bomba logiczna”, że tak powiem.

Dość często zdarza się, że dyski USB sformatowane w fat32 w systemie ext 4 są następnie przenoszone do systemów ZFS, które są nieprawidłowo skonfigurowane z powłoką csh jako powłoką logowania man. Tworzy wirtualną rekursję problemu „System plików USB tylko do odczytu” na dysku i formatuje / montuje dysk do vFat z fat32, co z kolei tworzy sektor uszkodzonych bloków i wyodrębnia (wirtualnie przenosi) katalog do jego poziom katalogów nadrzędnych, który powoduje nieskończoną pętlę! Katalog nie znajduje się fizycznie na poziomie hierarchii rodzica. Przyczyną tego jest składnia przyczyn csh. * UWAGA: Dysk jest odczytywany tylko we wszystkich systemach, z wyjątkiem systemu logowania c-shell zfs.

Aby całkowicie wyłączyć updatedb, można stworzyć nielogiczną logikę w odniesieniu do alokacji pamięci i „efektu wycofania”. Jeśli kiedykolwiek miałeś wycofanie, kiedy nie chciałeś, wiesz, co mam na myśli, gdy dwie godziny wiersza poleceń skrypty są Fubar-ed, ponieważ nie przydzieliłeś przetwarzania pracy do pamięci.

Teraz, jeśli masz dwa lub więcej procesorów fizycznych (np. Dwurdzeniowy lub więcej) i ramkę ddr3, to dobrze. Tak długo, jak nie uruchamiasz ciężkiej grafiki, w takim przypadku, jeśli to obciążenie powoduje problemy, aktualizacjab będzie ostatnia na twojej liście. Jeśli z jakiegoś powodu próbujesz ukryć swoje ruchy w systemie, istnieją inne sposoby na obejście tego niż wyłączenie funkcji updatedb, a tak naprawdę zaktualizowałoby twoje działania, że ​​„nic się nie wydarzy” aż do ukrycia się w twoim systemie.

Szczerze mówiąc, w oparciu o rozmiar pliku binarnego / usr / bin / updatedb i biorąc pod uwagę architekturę komunikacji sygnału / systemu w systemie operacyjnym i to, że Bash jest 10 razy większy niż wzajemnie połączona kreska lub popiół powłoki, asynchroniczne wywołanie to bardzo tani w systemie.

Jeśli jesteś zalogowany do powłoki z uruchomionymi napisanymi skryptami sekwencyjnymi i jesteś administratorem (np. Sudo), uruchom następujące polecenie:

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

Następnie prawdopodobnie chcesz utworzyć zmienną lokalną w swoim skrypcie (updatedb wymaga uprawnień systemowych, AKA root / sudo / wheel), np .:

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

echo "Beginning Execution of sequence "

W takim przypadku sekwencja używa STDOUT / STDIN z innych skryptów powłoki, które napisałeś i wykonujesz jako zmienne w swoim głównym skrypcie lub mówisz, że masz skonfigurowany osobisty lub biznesowy pakiet administratora, do którego ładujesz / pobierasz / port z cdrom lub USB lub cokolwiek, to jest bardzo duże i mają dla nich osobiste skrypty instalacyjne, CHCESZ PRZECHOWYWAĆ aktualizowany. Gdy powłoka terminala jest otwarta, jest to główna instancja aplikacji. Inne aplikacje mogą / działają asynchronicznie, ale aktualizacjab jest jedną z najtańszych pod względem ogólnego zapotrzebowania systemowego / komputerowego. Wiele razy, szczególnie z lxdm Desk Enviro i Lxterm (ta rzecz jest super szybka), ale nie tylko; bez dodawania updatedb do moich skryptów, system zastrzelił mi błędy, że pliki nie istnieją lub że coś się wydarzyło. I jestem jak CO!

Powłoka jest szybsza niż system, którym administruje. Gwarantuję ci to!

W takim przypadku należy wywołać zmienną updatedb, aby zablokować poprzednią sekwencję w pamięci, jak pokazano

echo "Updating local database "

$UPD

echo "Exiting script two "

exit

Czy widzisz, co mówię? Jeśli zapytasz o to, ponieważ przeprowadzasz testy prędkości wykonania, tj. Styl Andrew Tanenbaum, niż masz w tym. W innym przypadku skorzystaj z narzędzia na swoją korzyść.


Problemem z updatedb nie jest procesor ani pamięć, ale przepustowość we / wy. W moim przypadku (system z doskonałym procesorem i dużą ilością pamięci do zwolnienia) wiruje mój dysk twardy z prędkością 5 MB / s przez wiele godzin, jeden po drugim, spowalniając wszystko inne, co zależy od tego dysku. A kiedy wiem dokładnie, czego dokładnie szukam, są to nowe pliki, więc locatenie jest to przydatne, ponieważ nie jestem pewien, czy jest indeksowane. Kiedy pliki są starsze, idę fzfi szukam rozmytego.
Davidmh

0

Przynajmniej w ArchLinux wydaje się, że man-db.timeri updatedb.timersą domyślnie włączone (tzn. Istnieją następujące pliki), ale jest 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. [...](wyjście z systemctl enable {man-,update}db.timer).

Oto dowiązania symboliczne obecne w systemie plików:
/usr/lib/systemd/system/multi-user.target.wants/man-db.timer
/usr/lib/systemd/system/multi-user.target.wants/updatedb.timer

Należy po prostu je usunąć.
Jednak zostaną one odtworzone w każdym re / Instalacja / upgrade man-db, mlocatepakiety, odpowiednio.

W przypadku ArchLinuksa możliwym obejściem jest posiadanie haka dla Pacmana, aby je usunąć.
Usuwałby je jednak przy każdym takim zdarzeniu, nawet jeśli chcesz, aby były włączane między aktualizacjami.
W takim przypadku możesz wyłączyć hak, gdy chcesz włączyć timer.
Jednak włączenie timera zadziała tylko podczas ponownej instalacji / aktualizacji pakietu, ponieważ w domyślnych .timerplikach jednostkowych nie ma skonfigurowanej sekcji, która bezpośrednio systemctl enablewskazywałaby timery. Aby włączyć timer / s, należy usunąć
instrukcję ln -s ../man-db.timer /usr/lib/systemd/system/multi-user.target.wants/man-db.timerlub ln -s ../updatedb.timer /usr/lib/systemd/system/multi-user.target.wants/updatedb.timerpolecenie i usunąć link / s, aby je wyłączyć.

Możesz mieć nadpisywane niestandardowe jednostki /etc/systemd/system/{man-,update}db.timer, podając WantedBy=multi-user.targetw tej [Install]sekcji zezwalanie systemtl enable|disable, ale łącza /usr/lib/systemd/system/multi-user.target.wants/{man-,update}db.timerbędą nadal tworzone podczas ponownej instalacji / aktualizacji, skutecznie ponownie włączając je .timer.

Możesz także uruchomić, systemctl mask man-db.timer updatedb.timeraby zamaskować liczniki.
Nawet jeśli nadal byłoby możliwe ręczne uruchomienie w systemctl start man-db.service updatedb.servicecelu uruchomienia odpowiednich usług, nie można ręcznie uruchomić liczników czasu, z jakiegokolwiek powodu użytkownik uzna, że ​​chce / musi to zrobić.
To obejście nie pozwala /etc/systemd/system/{man-,update}db.timerna zastąpienie niestandardowych plików jednostek w razie potrzeby / potrzeby, ponieważ systemd musi zastąpić je dowiązaniem symbolicznym w /dev/nullcelu oznaczenia zamaskowanej jednostki.

Maskowanie wydaje się być najmniej inwazyjnym rozwiązaniem.
Wolę ręcznie usuwać /usr/lib/systemd/system/multi-user.target.wants/{man-,update}db.timerpo każdej aktualizacji i mieć nadpisywane pliki jednostek /etc/systemd/system/{man-,update}db.timerposiadające [Install]sekcję WantedBy=multi-user.targetumożliwiającą ręczne systemctlwłączanie / wyłączanie.

Niestety nie ma prostego obejścia tego problemu, o którym przynajmniej mogę teraz myśleć.
Zakłada się, że pakiety man-db, mlocatesą chciał / potrzebował być na bieżąco zainstalowane w systemie: usunięcie ich nie byłoby pożądane / użyteczne rozwiązanie.

Zobacz także: https://www.reddit.com/r/archlinux/comments/36fqzh/updatedbservice_and_mandbservice_increases_boot/

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.