はじめに

こんにちは!今回はniceコマンドについて解説します。

niceはプロセスの優先度を設定して実行するコマンドです。コンピュータのCPUパワーを効率的に配分するときに使います。バックアップなど時間のかかる処理を実行する際に、システム全体の動作を遅くしないようにするのに便利ですね。

「プロセス君、ちょっと遠回りしてもいい?」みたいな感じで、優先度を下げて実行できるコマンドです。

niceコマンドとは

niceは、プロセスの優先度(nice値)を指定してコマンドを実行する外部コマンドです。

Linuxではプロセスに優先度があって、優先度が高いほどCPUを多く使用できます。niceコマンドを使うと、優先度を下げてプロセスを実行でき、他のプロセスに邪魔にならないようにできます。バックアップやログ解析など、時間がかかっても構わない処理に最適ですね。

基本構文

1
nice [オプション] コマンド [コマンドの引数]

nice値は-20から19までの範囲で指定でき、数字が小さいほど優先度が高く、大きいほど優先度が低くなります。デフォルト値は0です。

主なオプション

オプション 説明
-n 値 nice値を指定(-20~19、デフォルト0)
--help ヘルプを表示
--version バージョン情報を表示

使用例

例1: デフォルト優先度を下げて実行

1
nice tar -czf backup.tar.gz /large/directory

実行結果:

1
(バックアップが低優先度で実行される)

tarコマンドを実行する際、デフォルト値(10)下げた優先度で実行します。

例2: 優先度を明示的に指定

1
nice -n 5 find / -type f -name "*.log" > logfiles.txt

実行結果:

1
(検索が優先度5で実行される)

nice値を5に設定して、ファイル検索を実行します。

例3: 最も低い優先度で実行

1
nice -n 19 rsync -av /source /destination

実行結果:

1
(rsyncが最も低い優先度で実行される)

nice値を19(最も低い値)に設定してバックアップを実行。システムへの影響が最小限になります。

例4: スクリプトを低優先度で実行

1
nice -n 10 /home/user/scripts/backup.sh

実行結果:

1
(スクリプトが実行される)

シェルスクリプトを優先度を下げて実行します。

例5: データベースダンプを低優先度で実行

1
nice -n 15 mysqldump -u root -p mydb > backup.sql

実行結果:

1
(ダンプが低優先度で実行される)

大きなデータベースのダンプを取得する際、システムに負荷をかけにくくなります。

例6: 定期的なクリーンアップを低優先度で実行

1
nice -n 10 find /tmp -type f -mtime +7 -delete

実行結果:

1
(削除処理が低優先度で実行される)

古いテンポラリファイルの削除を低優先度で実行。

例7: パイプで複数コマンドを組み合わせ

1
nice -n 12 bash -c 'cat largefile | grep pattern | sort | uniq -c'

実行結果:

1
(パイプの全処理が低優先度で実行される)

複数のコマンドをパイプで組み合わせる場合、bashで一つのプロセスとして実行します。

例8: ビデオ変換を低優先度で実行

1
nice -n 18 ffmpeg -i input.mp4 -c:v libx264 output.mp4

実行結果:

1
(変換処理が最も低い優先度で実行される)

CPU負荷が高い動画変換を低優先度で実行。

Tips・注意点

スーパーユーザーのみ優先度を上げられる

1
2
nice -n -5 mycommand  # 一般ユーザーではエラー
sudo nice -n -5 mycommand  # スーパーユーザーでは可能

優先度を上げる(マイナスの値)場合は、sudoで実行する必要があります。一般ユーザーは優先度を下げることのみできます。

crontabで低優先度実行

1
2
# crontabファイルの例
0 2 * * * nice -n 15 /home/user/scripts/backup.sh

cronで定期実行するジョブを低優先度で実行すると、日中のユーザー操作に邪魔になりません。

既存プロセスの優先度変更

1
2
nice -n 10 mycommand    # 実行時に優先度を指定
renice -n 10 -p 12345   # 既に実行中のプロセスの優先度を変更

niceは実行時に優先度を指定しますが、既に実行中のプロセスの優先度を変更したい場合はreniceコマンドを使います。

実践的な使い方

定期的なバックアップタスク

1
nice -n 15 /opt/backup/daily-backup.sh

毎日実行するバックアップスクリプトを低優先度で実行。通常業務に支障が出ません。

ログ圧縮処理

1
nice -n 12 find /var/log -name "*.log" -mtime +30 -exec gzip {} \;

30日以上前のログファイルを低優先度で圧縮。ディスク容量を効率的に管理できます。

インデックス再構築

1
nice -n 18 mysql -e "OPTIMIZE TABLE large_table;"

大きなテーブルのインデックス再構築を低優先度で実行。データベース操作による負荷を最小化できます。

ファイルシステムの整理

1
nice -n 10 find / -type f -size 0 -delete

ゼロサイズのファイルをシステム全体から削除。低優先度で実行することで、システムのレスポンスに影響しません。

まとめ

niceコマンドのポイント:

  • プロセスの優先度を指定して実行する外部コマンド
  • -n 値: nice値を指定(-20~19、デフォルト0)
  • 一般ユーザーは優先度を下げることのみ可能
  • スーパーユーザーは優先度を上下できる
  • バックアップやログ処理など時間がかかる処理に最適
  • 既に実行中のプロセスはreniceで変更
  • よく使う組み合わせ: nice -n 10, nice -n 15

バックアップや重い処理を実行する際にniceを使うと、システム全体のユーザー体験が向上します。時間に余裕のある処理に優先度を下げるのは、Linux管理者の基本技ですよ!