updatedb
は必要ですか?私はlocate
を使用することはなく、私のサーバーには数千万ものファイルが存在する傾向があるため、updatedbは長時間実行され、MySQLやその他のソフトウェアが必要とするI/Oを消費します。
Cronから削除して、すべてが機能することを期待できますか? (私がサーバーで見つけた通常のソフトウェアを意味するすべてによって:linux、cpanel、mysql、Apache、phpなど)。
はい、それをcronで無効にするか、updatedb
を提供するパッケージを削除できます。 Red Hatシステムでは、削除する前に、それが必要かどうかを判断する手順を実行します。
まず、プログラムがディスク上のどこにあるかを確認します。
$ type updatedb
updatedb is /usr/bin/updatedb
次に、どのパッケージがupdatedb
を提供するかを調べます。
$ rpm -qf /usr/bin/updatedb
mlocate-0.26-3.fc19.x86_64
mlocate
が必要かどうかを確認します。
$ rpm -q --whatrequires mlocate
no package requires mlocate
何も必要ないので、パッケージを削除できます。
$ yum remove mlocate
多くのファイルがあるディレクトリのスキャンを無効にすることができます(/var/www
の例)/etc/updatedb.conf
構成ファイル。本当に無効にしたい場合は、cronjobを削除してください。
パッケージマネージャーを使用して削除します。別のパッケージがそれを使用している場合は、依存している必要があるため(パッケージの依存関係)わかるでしょう。
Nginx
、php-fpm
とmysql
、そしてupdatedb
がなくても美しく動作します。
少なくとも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
単にそれらを削除するだけの問題でなければなりません。
ただし、これらは、man-db
、mlocate
パッケージのそれぞれの再インストール、インストール、アップグレードのたびに再作成されます。
ArchLinuxの場合、考えられる回避策は、pacmanがそれらを削除するためのフックを持つことです。
ただし、アップグレード全体で有効にする場合でも、このようなイベントごとに削除されます。
その場合、タイマーを有効にしたいときにフックを無効にすることができます。
しかし、タイマーを有効にすることは、タイマーを直接.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
コマンドが必要になります。
カスタムユニット/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
リンクは、再インストール/アップグレード時に引き続き作成され、.timer
sを効果的に再度有効にします。
また、systemctl mask man-db.timer updatedb.timer
を実行してタイマーをマスクすることもできます。
対応するサービスを開始するためにsystemctl start man-db.service updatedb.service
を手動で実行することが依然として可能であるとしても、ユーザーが自分でそうすることを望んでいる/必要としていることに気づくと思われる理由で、タイマーを手動で開始することはできません。
systemdがマスクされたユニットを示すために/etc/systemd/system/{man-,update}db.timer
へのシンボリックリンクに置き換える必要があるため、この回避策では、必要に応じてカスタム/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/
私はこれを言って遠くに行くつもりはありませんが、おそらくあなたの問題を引き起こしているそれは更新されていません。おそらくあなたが望まない何か、「好み」に設定していないバックアップアプリケーションか、プロファイル/システムグループ構造のセキュリティ問題。
システムのメモリ割り当てがユーザーに対して機能しているように見えるもう1つのケースは、「スタックしている仮想ファイルシステムを知らない」というシナリオです。そして、それは問題の途方もないです。いわば「仮想の悪論理爆弾」。
Ext 4システムでfat32でフォーマットされたUSBドライブが、manログインシェルとしてcshシェルで正しく設定されていないzfsシステムに転送されることがよくあります。ディスク上に「読み取りファイルのみのUSBファイルシステム」の問題の仮想再帰を作成し、ドライブをfat32からvFatにフォーマット/マウントします。これにより、不良ブロックセクターが作成され、そのディレクトリまでディレクトリが抽出(仮想的に移動)されます。親ディレクトリレベル。無限ループが発生します。ディレクトリが物理的に親の階層レベルにない。この原因は、cshの原因の構文です。 *注:ドライブは、zfs c-Shellログインシステムを除くすべてのシステムでのみ読み取られます。
Updatedbを完全に無効にすると、メモリ割り当てと「ロールバック効果」に関連して不適切なロジックが作成される可能性があります。ロールバックが必要ないときにロールバックしたことがある場合は、2時間分のコマンドラインを実行するとどうなるかを理解できます。ジョブ処理をメモリに割り当てなかったため、スクリプトはFubarで編集されています。
2つ以上の物理プロセッサ(デュアルコア以上など)とddr3 ramがある場合は、問題ありません。重いグラフィックを実行していない限り、そのpowerloadが問題の原因である場合、updatedbはリストの最後になります。何らかの理由でシステムへの動きを偽装しようとしている場合は、updatedbを無効にする以外に他の方法があります。実際、updatedbはシステムに偽装している限り、「何も起こらない」というアクションを固めます。
率直に言って、バイナリファイル/ usr/bin/updatedbのサイズに基づいており、OS内での信号/システム通信のアーキテクチャを考慮し、Bashのサイズが相互にリンクされていることを示します。シェルダッシュまたは非同期呼び出しは、非同期呼び出しです。システム上で非常に安価です。
作成した順次スクリプトを実行してシェルにログインし、管理者(Sudoなど)である場合は、次のコマンドを実行します。
~$ Sudo bash
:~# ./script.sh
次に、おそらくスクリプト内にローカル変数を作成する必要があります(updatedbにはシステム権限、別名root/Sudo/wheelが必要です)。
#! /bin/sh
# Create local variables
UPD="updatedb"
echo "Beginning Execution of sequence "
その場合、シーケンスは他のシェルスクリプトのSTDOUT/STDINを使用しており、メインスクリプトで変数として実行している、またはcdromからアップロード/ダウンロード/ポートする個人またはビジネスの管理パッケージがセットアップされていると言います。 usbまたは何か、それは非常に大きく、個人用のインストールスクリプトがあるため、更新したままにしておきます。ターミナルシェルが開いているときは、それがメインのアプリケーションインスタンスです。他のアプリケーションは非同期で実行できますが、updatedbは、システム/コンピューティングの全体的な需要の面で最も安価なアプリケーションの1つです。多くの場合、特にlxdm Desk EnviroとLxterm(これは非常に高速です)を使用しますが、それだけではありません。スクリプトにupdatedbを追加せずに、ファイルが存在しない、または何かおかしなことが起こったというエラーをシステムが撃ちました。そして私は何が好きです!
シェルは、管理しているシステムよりも高速であることを保証します。
この場合、次に示すように、updatedb変数を呼び出して前のシーケンスをメモリにロックします。
echo "Updating local database "
$UPD
echo "Exiting script two "
exit
イムの言っていることがわかりますか?実行速度テストを実行しているためにこれを要求した場合、つまり、Andrew Tanenbaumスタイルを実行しているよりも。それ以外の場合は、ツールを有利に使用してください。