Bisakah saya menonaktifkan updatedb?


26

Apakah updatedbperlu sama sekali? Saya tidak pernah menggunakan locatedan server saya cenderung memiliki puluhan juta file yang biasanya membuat updatedb untuk berjalan lama dan mengkonsumsi I / O yang dibutuhkan oleh MySQL dan / atau perangkat lunak lain.

Bisakah saya menghapusnya dari cron dan berharap semuanya berfungsi? (dengan segala yang saya maksud perangkat lunak biasa ditemukan di server: linux, cpanel, mysql, apache, php dll).

Jawaban:


25

Ya, Anda dapat menonaktifkannya di crons atau menghapus paket yang menyediakan updatedb. Pada sistem Red Hat Anda akan melakukan langkah-langkah dalam menentukan apakah ada yang memerlukannya sebelum dihapus.

  1. Pertama cari tahu di mana program tersebut berada pada disk.

    $ type updatedb
    updatedb is /usr/bin/updatedb
    
  2. Selanjutnya cari tahu paket apa yang disediakan updatedb.

    $ rpm -qf /usr/bin/updatedb
    mlocate-0.26-3.fc19.x86_64
    
  3. Lihat apakah ada yang membutuhkan mlocate.

    $ rpm -q --whatrequires mlocate
    no package requires mlocate
    
  4. Tidak ada yang membutuhkannya sehingga Anda dapat menghapus paket.

    $ yum remove mlocate
    

1
rpmjuga punya --whatrecommends. Saya pikir Fedora mulai melihatnya sebagai sebuah konsep dalam beberapa tahun terakhir. (Lama setelah sisi debian / ubuntu default untuk menginstal dependensi "merekomendasikan" serta yang "membutuhkan").
sourcejedi

jadi setelah menghapus dapatkah saya menghapus /var/lib/mlocate?
Ramratan Gupta

1
@RamratanGupta - ya
slm

13

Anda dapat menonaktifkan pemindaian direktori yang memiliki banyak file ( /var/wwwmisalnya) dengan mengedit /etc/updatedb.conffile konfigurasi. Jika Anda benar-benar ingin menonaktifkannya, maka cukup hapus cronjob.


5

Hapus itu menggunakan manajer paket Anda, jika paket lain menggunakannya, Anda akan tahu, karena harus bergantung padanya (ketergantungan paket).

Saya memiliki server dengan Nginx, php-fpmdan mysql, dan berfungsi dengan baik tanpa updatedb.


Selain itu, di apt Anda dapat menggunakan aptitude remove, aptitude whyatau aptitude search '?installed ?recommends(mlocate)'. Ini semua akan menunjukkan merekomendasikan dependensi, selain yang membutuhkan. apt sekarang menginstal paket yang direkomendasikan secara default, jadi sementara mereka tidak dianggap penting, mereka mungkin dapat diandalkan untuk menyediakan beberapa sub-fungsi yang sangat berguna.
sourcejedi

0

Saya tidak akan mengambil risiko dengan mengatakan ini, tetapi kemungkinan besar itu tidak diperbaruib yang menyebabkan masalah Anda. Mungkin ada hal lain yang tidak Anda inginkan, baik aplikasi cadangan yang belum Anda konfigurasikan dengan 'kesukaan' Anda atau masalah keamanan dengan struktur grup profil / sistem Anda.

Kasus lain di mana kelihatannya alokasi memori sistem bekerja melawan pengguna adalah skenario ketika seseorang 'tidak mengetahui susun sistem file virtual'. Dan itu adalah masalah booger. 'Bom logika virtual' bisa dibilang begitu.

Ini cukup sering terjadi pada drive USB yang diformat dalam FAT32 pada sistem ext 4 yang kemudian ditransfer ke sistem zfs yang tidak benar diatur dengan csh shell sebagai shell login man. Itu menciptakan rekursi virtual dari masalah "Read-File only USB file system" pada disk dan memformat / me-mount drive ke vFat dari fat32, yang pada gilirannya menciptakan sektor blok yang buruk, dan mengekstrak (hampir memindahkan) direktori hingga ke tingkat direktori induk, yang menyebabkan loop tak terbatas! Direktori tidak secara fisik berada pada level hierarki induk. Sintaks penyebab csh adalah penyebabnya. * CATATAN: Drive dibaca hanya pada semua sistem tetapi sistem c-shell zfs login.

Untuk benar-benar menonaktifkan updatedb dapat membuat logika buruk mengacu pada alokasi memori dan 'efek roll back' .. Jika Anda pernah memiliki roll kembali ketika Anda tidak menginginkannya, Anda tahu apa yang saya maksud ketika dua jam senilai baris perintah scripting adalah Fubar-red karena Anda tidak mengalokasikan pekerjaan Anda memproses ke memori.

Sekarang jika Anda memiliki dua atau lebih prosesor fisik (mis. Dual core atau lebih), dan ddr3 ram, maka denda Anda. Selama Anda tidak menjalankan grafik yang berat, dalam hal ini jika daya yang menyebabkan masalah Anda, updatedb akan menjadi yang terakhir dalam daftar Anda. Jika Anda mencoba untuk menyamarkan gerakan Anda ke sistem untuk beberapa alasan maka ada cara lain untuk melakukannya daripada menonaktifkan updatedb, dan pada kenyataannya updateb akan memperkuat tindakan Anda yang 'tidak terjadi apa-apa' sejauh penyamaran pada sistem Anda.

Sejujurnya berdasarkan pada ukuran file biner / usr / bin / updatedb dan mempertimbangkan arsitektur sinyal / sistem komunikasi dengan-di OS dan bahwa Bash adalah 10 kali ukuran shell dasbor atau abu yang dihubungkan secara timbal balik, panggilan asyncronous adalah sangat murah di sistem.

Jika Anda masuk ke shell yang menjalankan skrip berurutan yang telah Anda tulis, dan Anda adalah seorang administrator (misalnya sudo), jalankan perintah berikut:

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

Maka Anda mungkin ingin membuat variabel lokal di dalam skrip Anda (updatedb membutuhkan hak sistem, AKA root / sudo / wheel), misalnya:

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

echo "Beginning Execution of sequence "

Dalam hal ini urutannya menggunakan STDOUT / STDIN dari skrip shell lain yang telah Anda tulis dan dieksekusi sebagai variabel dengan dalam skrip utama Anda atau mengatakan Anda memiliki paket admin pribadi atau bisnis yang diatur di mana Anda mengunggah / mengunduh / port dari cdrom atau usb atau apa pun, yang sangat besar dan memiliki skrip instalasi pribadi untuk mereka, ANDA INGIN DIPERPANJANGb. Ketika shell terminal terbuka, itu adalah contoh aplikasi utama Anda. Aplikasi lain dapat / tidak berjalan secara asinkron tetapi updatedb adalah salah satu yang paling murah dalam hal keseluruhan kebutuhan sistem / komputasi. Banyak kali, terutama dengan di lxdm Desk Enviro's dan Lxterm (hal itu sangat cepat), tetapi tidak semata-mata; tanpa menambahkan updatedb ke skrip saya, sistem telah menembak saya kesalahan bahwa file tidak ada atau sesuatu yang aneh terjadi. Dan aku suka APA!

Shell lebih cepat dari sistem yang dikelolanya Saya jamin itu!

Dalam hal ini Anda kemudian akan memanggil variabel updatedb untuk mengunci urutan sebelumnya ke dalam memori, seperti yang ditunjukkan

echo "Updating local database "

$UPD

echo "Exiting script two "

exit

Apakah Anda melihat apa yang saya katakan? Jika Anda bertanya ini karena Anda menjalankan tes kecepatan eksekusi yaitu gaya Andrew Tanenbaum daripada memilikinya. Lain bijak menggunakan alat ini untuk keuntungan Anda.


Masalah dengan updatedb bukanlah CPU atau memori, tetapi bandwidth IO. Dalam kasus saya (sistem dengan CPU yang hebat dan banyak memori yang tersisa) itu memutar hard drive saya di 5 MB / s selama berjam-jam, satu per satu, memperlambat segala sesuatu yang tergantung pada drive itu. Dan ketika saya tahu persis apa yang saya cari, mereka adalah file-file baru, jadi locatetidak berguna karena saya tidak yakin itu diindeks. Ketika file lebih tua, saya mencari fzfdan pencarian fuzzy.
Davidmh

0

Setidaknya dalam ArchLinux, tampaknya itu man-db.timerdan updatedb.timerdiaktifkan secara default (yaitu: file-file berikut ada), tetapi ada 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. [...](output dari systemctl enable {man-,update}db.timer).

Ini adalah tautan simbolis yang ada dalam sistem file:
/usr/lib/systemd/system/multi-user.target.wants/man-db.timer
/usr/lib/systemd/system/multi-user.target.wants/updatedb.timer

Seharusnya hanya masalah menghapusnya.
Namun, mereka akan diciptakan kembali pada setiap ulang / instalasi / upgrade dari man-db, mlocatepaket, masing-masing.

Untuk ArchLinux, solusi yang mungkin adalah memiliki kait untuk pacman untuk menghapusnya.
Namun, itu akan menghapusnya di setiap acara seperti itu, bahkan jika Anda ingin mereka diaktifkan di upgrade.
Dalam hal ini, Anda dapat menonaktifkan kait ketika ingin timer diaktifkan.
Tetapi, mengaktifkan timer hanya akan berpengaruh pada instalasi ulang / peningkatan paket, karena tidak ada bagian yang dikonfigurasikan dalam .timerfile unit default untuk mengarahkan systemctl enabletimer secara langsung .
Manual ln -s ../man-db.timer /usr/lib/systemd/system/multi-user.target.wants/man-db.timeratau ln -s ../updatedb.timer /usr/lib/systemd/system/multi-user.target.wants/updatedb.timerperintah akan diperlukan untuk mengaktifkan timer, dan menghapus tautan untuk menonaktifkannya.

Anda dapat mengesampingkan unit khusus /etc/systemd/system/{man-,update}db.timer, menyediakan WantedBy=multi-user.targetdi [Install]bagian untuk memungkinkan systemtl enable|disable, tetapi tautan /usr/lib/systemd/system/multi-user.target.wants/{man-,update}db.timermasih akan dibuat pada saat pemasangan ulang / peningkatan, secara efektif mengaktifkan kembali .timers.

Anda juga bisa berlari systemctl mask man-db.timer updatedb.timeruntuk menutupi penghitung waktu.
Bahkan jika masih mungkin untuk menjalankan secara manual systemctl start man-db.service updatedb.serviceuntuk memulai layanan yang sesuai, Anda tidak akan dapat memulai timer secara manual, untuk alasan apa pun yang diinginkan / perlu dilakukan oleh pengguna.
Penanganan masalah ini tidak mengizinkan adanya override /etc/systemd/system/{man-,update}db.timerfile unit kustom jika diinginkan / diperlukan, karena systemd perlu menggantinya dengan tautan simbolik /dev/nulluntuk menandakan unit yang di-mask.

Masking tampaknya menjadi solusi yang paling tidak mengganggu.
Saya lebih suka menghapus secara manual /usr/lib/systemd/system/multi-user.target.wants/{man-,update}db.timersetelah setiap peningkatan, dan memiliki menimpa file unit /etc/systemd/system/{man-,update}db.timermemiliki [Install]bagian WantedBy=multi-user.targetuntuk mengaktifkan systemctlmengaktifkan / menonaktifkan manual .

Sayangnya, tidak ada pekerjaan sederhana di sekitar ini, yang setidaknya, bisa saya pikirkan, saat ini.
Ini mengasumsikan bahwa paket-paket itu man-db, mlocateingin / perlu untuk tetap diinstal dalam sistem: menghapusnya tidak akan menjadi solusi yang diinginkan / berguna.

Lihat juga ini: https://www.reddit.com/r/archlinux/comments/36fqzh/updatedbservice_and_mandbservice_increases_boot/

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.