Czy updatedb
w ogóle jest to konieczne? Nigdy nie używam, locate
a 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.).
źródło
rpm
też 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”)./var/lib/mlocate
?Możesz wyłączyć skanowanie katalogów zawierających wiele plików (
/var/www
na przykład), edytując/etc/updatedb.conf
plik konfiguracyjny. Jeśli naprawdę chcesz to wyłączyć, po prostu usuń cronjob.źródło
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-fpm
imysql
, i to działa pięknie bezupdatedb
.źródło
aptitude remove
,aptitude why
lubaptitude 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ę.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:
Następnie prawdopodobnie chcesz utworzyć zmienną lokalną w swoim skrypcie (updatedb wymaga uprawnień systemowych, AKA root / sudo / wheel), np .:
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
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ść.
źródło
locate
nie jest to przydatne, ponieważ nie jestem pewien, czy jest indeksowane. Kiedy pliki są starsze, idęfzf
i szukam rozmytego.Przynajmniej w ArchLinux wydaje się, że
man-db.timer
iupdatedb.timer
są domyślnie włączone (tzn. Istnieją następujące pliki), ale jestno 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 zsystemctl 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
,mlocate
pakiety, 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
.timer
plikach jednostkowych nie ma skonfigurowanej sekcji, która bezpośredniosystemctl enable
wskazywał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.timer
lubln -s ../updatedb.timer /usr/lib/systemd/system/multi-user.target.wants/updatedb.timer
polecenie i usunąć link / s, aby je wyłączyć.Możesz mieć nadpisywane niestandardowe jednostki
/etc/systemd/system/{man-,update}db.timer
, podającWantedBy=multi-user.target
w tej[Install]
sekcji zezwalaniesystemtl enable|disable
, ale łącza/usr/lib/systemd/system/multi-user.target.wants/{man-,update}db.timer
bę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.timer
aby zamaskować liczniki.Nawet jeśli nadal byłoby możliwe ręczne uruchomienie w
systemctl start man-db.service updatedb.service
celu 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.timer
na zastąpienie niestandardowych plików jednostek w razie potrzeby / potrzeby, ponieważ systemd musi zastąpić je dowiązaniem symbolicznym w/dev/null
celu 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.timer
po każdej aktualizacji i mieć nadpisywane pliki jednostek/etc/systemd/system/{man-,update}db.timer
posiadające[Install]
sekcjęWantedBy=multi-user.target
umożliwiającą ręcznesystemctl
włą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
,mlocate
są 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/
źródło