20200205のLinuxに関する記事は9件です。

初心者向け!基本的なLinuxコマンドと使い方!

みなさんこんにちわ!

こちらはhttps://nokonoko1203.qrunch.io/entries/dSVhxUEcdi3WsU1Vの再投稿になります

このページを見に来てくれた方で、「Linuxを知らない」という方は少ないと思いますが、Linuxのコマンドを熟知している、という方はかなり少ないのではないかなと思います。

全貌はわかりませんが、こちら(Linux コマンド 一覧表(manページ一覧))をざっと見ただけでも無数のコマンドが存在することがわかります。

これらを全て把握し、使いこなすのは容易ではありません。

しかし、実際に日常的に使うコマンドはごくわずかで、全て覚える必要はありません!

今回は「最低限必要なコマンド」を厳選して紹介します!

基本的なLinuxコマンド一覧

①最低限使える必要があるコマンド

  • cd:現在のディレクトリの変更
  • pwd:現在のディレクトリの表示
  • mkdir:ディレクトリの作成
  • ls:ファイル・ディレクトリの一覧の表示
  • rm:ファイルやディレクトリの削除
  • touch:引数で渡された名前のファイルが存在しなかった場合には、空ファイルを作成し、存在した場合には、そのファイルやディレクトリの更新日時を更新
  • cp:ファイルやディレクトリのコピー
  • mv:ファイルやディレクトリの移動

②使えたら便利なコマンド

  • find:ファイル・ディレクトリの検索
  • nano:CUIに慣れていない方でも使いやすい初心者向けエディター
  • cat:複数のファイルの中身を結合して、標準出力に出力
  • less:ファイルの中身をページ送りしながら表示
  • grep:ファイルや標準入力の中から特定の単語を検索
  • chmod:ファイル権限を変更
  • echo:第一引数で与えられた文字列を、そのまま標準出力に出力
  • read:第一引数で与えられた名前の変数に、標準入力で与えられた文字を代入
  • tmux:1つのコンソールで、複数のコンソールを操作したり、コンソールの状態を維持したままにする
  • crontab:プログラムを自動実行するスケジュールを設定する

これらのコマンドを2回に分けて解説していきます!

cd:現在のディレクトリの変更

cdはChange Directoryの略で 「現在のディレクトリ(カレントディレクトリ)を変更する」コマンドです。

cdコマンドを使って、MacにVagrantでLinuxを入れてSSHで接続する方法で作成した/Users/{Macのログイン名}/vagrant/ubuntu/workspaceに移動してみましょう。

local:~ {あなたのユーザー名}$ cd ~/vagrant/ubuntu/workspace

local:workspace {あなたのユーザー名}$

local:○○の部分の表示が変更されたと思います。これでカレントディレクトリが変更になりました。

これを別なコマンドで確認してみましょう。

pwd:現在のディレクトリの表示

pwdはPrint Working Directoryの略で、名前の通りカレントディレクトリを表示します。

実際にカレントディレクトリを表示してみましょう。

$ pwd

/Users/{あなたのユーザー名}/vagrant/ubuntu/workspace

このように、pwdコマンドは絶対パスが表示されます。

ワンポイント用語解説

パス:ファイルやディレクトリの位置のこと
絶対パス:ルート(最上位)ディレクトリからのパス
相対パス:カレントディレクトリからのパス

. はカレントディレクトリ、..はひとつ上のディレクトリを表します。

このため、先ほどの例でカレントディレクトリがubuntu(/Users/{あなたのユーザー名}/vagrant/ubuntu)の場合に、workspaceディレクトリを示したいとき

# 絶対パス
/Users/{あなたのユーザー名}/vagrant/ubuntu/workspace

# 相対パス
./workspace

となります!

mkdir:ディレクトリの作成

mkdirはmake directoryの略でディレクトリを作成することが出来ます。

試しにubuntuディレクトリにdemoディレクトリを作成してみましょう。

# 現在のディレクトリを表示
$ pwd
/Users/{あなたのユーザー名}/vagrant/ubuntu/workspace

# cdコマンドで一つ上のディレクトリに移動
$ cd ..

# 再度確認
$ pwd

/Users/{あなたのユーザー名}/vagrant/ubuntu

# ubuntuディレクトリにdemoディレクトリを作成
$ mkdir demo

これでdemoディレクトリが作成されました。

lsコマンドで確認してみましょう!

ls:ファイル・ディレクトリの一覧の表示

lsはListの略でカレントディレクトリのファイル及びディレクトリを表示します。

早速使ってみましょう。

$ ls
demo        workspace

と表示されると思います。

ubuntuディレクトリには先ほど作成したdemoディレクトリと、最初からあったworkspaceディレクトリの2つが存在することが確認できますね!

ちなみに、Linuxのコマンドにはオプションをつけることができます。

オプションは何種類もあるのですが、lsコマンドでは-aというオプションをつけることで「隠しファイル(ドットファイル)」を見ることができます。

実際に試してみましょう!

# ホームディレクトリ(チルダ:~)に移動
$ cd ~

# ホームディレクトリにあるファイル・ディレクトリが色々表示される
$ ls
Applications            Users
Desktop             home
Documents
・・・

# -aオプションをつけると「.」のついたファイル・ディレクトリが表示される
$ ls -a
.
..
.Trash
.bash_history           .ssh
.bash_profile           .bashrc
.config             .bundle

・・・

Applications            Users
Desktop             home
Documents

このように-aオプションをつけると、「.」のついたファイル・ディレクトリが表示されます。

ドットで始まるファイルはソフトの設定ファイルや一時ファイルであることが多く、.bash_profile.bashrcは環境変数の設定、.sshはsshの接続の際に必要な情報等が入っている重要かつ頻繁に修正を加えるものなので覚えておきましょう!

rm:ファイルやディレクトリの削除

rmはremoveの略で、コマンドではファイル及びディレクトリを削除することができます。

しかし、ディレクトリを削除する際には-rオプションをつける必要があります。

$ pwd
/Users/{あなたのユーザー名}/vagrant/ubuntu

$ ls
demo        workspace

# -rオプションなし
$ rm demo

# エラーが出る
rm: demo: is a directory

# -rオプション有り
$ rm -r demo
$ ls
workspace

このようにdemoディレクトリが削除されて、workspaceのみが表示されるはずです。

-rオプションは「再帰的に」という意味で、ディレクトリの中身を含めて全て消してしまいたい時に使うのですが、ファイルが入っていないディレクトリにもオプションを指定してあげる必要があります。

touch:引数で渡された名前のファイルが存在しなかった場合には、空ファイルを作成し、存在した場合には、そのファイルやディレクトリの更新日時を更新

touchはchange file access and modification timesの略で、ファイルの最終アクセス日時と最終更新日時を変更するコマンドだが、存在しないファイル名を指定することでファイルの新規作成も行える。

今回はubuntuディレクトリにファイルの新規作成を行っていきます。

# カレントディレクトリを確認
$ pwd
/Users/{あなたのユーザー名}/vagrant/ubuntu

# tmpファイルを作成
$ touch tmp
$ ls
tmp     workspace

これでファイルの新規作成ができました。

cp:ファイルやディレクトリのコピー

cpはcopyの略で、
ファイルやディレクトリをコピーすることができます。第一引数にコピー元のファイル・ディレクトリを、 第二引数にコピー先のファイル・ディレクトリを指定してあげます。

上で作成した、tmpファイルをworkspaceディレクトリに移動しましょう!

# 第一引数でコピーしたいtmpファイルを指定、第二引数でコピーしたいパスと、新規作成するファイルの名前(tmp)を指定
$ cp tmp ./workspace/tmp

# workspaceに移動
$ cd ./workspace

# ディレクトリの中身を確認
$ ls
tmp

パスの指定など、少し操作が面倒ですがこれでファイルのコピーが出来ます!

ディレクトリをコピーする際には-rオプションを指定して再帰的にコピーする必要があります。

mv:ファイルやディレクトリの移動

mvはmoveの略で、ファイル・ディレクトリを移動することができます!

ubuntuディレクトリでファイルを新規作成して、workspaceに移動させてみましょう!

# ディレクトリの中身を確認
$ ls
tmp     workspace

# tmp2ファイルを作成
$ touch tmp2
$ ls
tmp     tmp2        workspace

# workspaceに移動
$ mv tmp2 ./workspace
$ cd ./workspace
$ ls
tmp tmp2

mvコマンドはこの他にも、名前を変更するのに使えます。

$ ls
tmp tmp2

# tmp2のファイル名をdemo_fileに変更
$ mv tmp2 demo_file
$ ls
demo_file   tmp

このようにファイルの移動・修正を行うことができます。

どちらも同じコマンドで出来てしまうので注意が必要ですが、非常に便利なコマンドです!

以上、計8個のコマンドの説明をしてきました。

これらはターミナルを使った操作の中でも基本中の基本ですので、ぜひ使ってみて、覚えてみましょう!

紹介した以外にも多数のオプションが存在しますので、色々調べて、試してみてくださいね!

次回はこの他に、使えたら便利なコマンドを紹介していきます!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Debian で vmware horizon client を動かす

Debian Linux (AMD64) に VMware horizon client をインストールして、firefox から起動するための手順。当てはまるのは、うちの会社だけかも。
Linux から、Windows のリモートデスクトップにつなぐための手段。

VMware horizon のインストール

  1. Web browser で https://my.vmware.com/jp/web/vmware/info/slug/desktop_end_user_computing/vmware_horizon_clients/4_0 (version は変わっていくと思われる) に行く。
  2. 表示されたページの 64 bit linux のところの[ダウンロードする]ボタンから、ダウンロードページへ飛ぶ。
  3. ダウンロードする。
  4. /bin/su - で root になる。
  5. echo $PATH で /sbin や /usr/sbin が PATH に含まれることを確認。これがないと、インストール途中でエラーに。
  6. ダウンロードしたディレクトリに移動し、 VMware-Horizon-Client-5.3.0-15208949.x64.bundle というような名前のファイルを sh で実行。
  7. 質問には、 yes と答えておく。
  8. /tmp/vmware-root 中の vmware-installer-*.log のファイルのうち、一番新しいものを less で見る。
  9. 深刻なエラーが起こっていないことを確認。
  10. /usr/bin/vmware-view が存在し、 /usr/lib/vmware 中に library files やディレクトリが生成されていることを確認する。
  11. 環境にもよるが、一度ログアウトして、入り直したほうがいいかも。

firefox から起動

  1. 社内の Workspace One のページを firefox で開く。
  2. 認証を済まして、デスクトップを開くためのアイコンを出す。
  3. アイコンをクリックする。
  4. 多分、立ち上がらないので、firefox の設定画面を出す。
  5. プログラムのところに、「ファイルの種類」が vmware-view となっていて、「取り扱い方法」が「毎回確認する」になっていたら、「毎回確認する」をクリック。
  6. ファイルを選べるはずなので、/usr/bin/vmware-view を指定する。
  7. 一度、firefox を立ち上げ直したほうがいいかも。
  8. 再度 Workspace One を開いて、アイコンをクリックすると、きっと立ち上がる。

スマートカードを使う

  1. apt install pcscd で debian にソフトウェアを入れたら動いたようす。他にも、 gnome-keyring-pkcs11 libpkcs11-helper1 opensc-pkcs11 を入れたが、関係ないかも。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LinuxでAnacondaインストール中に固った場合

はじめに

CentOSにAnacondaをインストール中にトラブったのでメモ

環境

  • CentOS 7
  • Anaconda 2019.10-Linux-x86_64.

現象

Anaconda3-2019.10-Linux-x86_64.shでインストール中に以下のUnpacking payloadのところで固まった状態になった。

Anaconda3 will now be installed into this location:
/home/kimisyo/anaconda3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

[/home/kimisyo/anaconda3] >>>
PREFIX=/home/kimisyo/anaconda3
Unpacking payload ...

対応

シングルコアの場合に発生するらしい。仮想環境の場合は仮想マシンのCPUのコア数を2以上にするとうまくいった。

参考

https://github.com/ContinuumIO/anaconda-issues/issues/11466

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LinuxでAnacondaインストール中に固まった場合

はじめに

CentOSにAnacondaをインストール中にトラブったのでメモ

環境

  • CentOS 7
  • Anaconda 2019.10-Linux-x86_64.

現象

Anaconda3-2019.10-Linux-x86_64.shでインストール中に以下のUnpacking payloadのところで固まった状態になった。

Anaconda3 will now be installed into this location:
/home/kimisyo/anaconda3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

[/home/kimisyo/anaconda3] >>>
PREFIX=/home/kimisyo/anaconda3
Unpacking payload ...

対応

シングルコアの場合に発生するらしい。仮想環境の場合は仮想マシンのCPUのコア数を2以上にするとうまくいった。

参考

https://github.com/ContinuumIO/anaconda-issues/issues/11466

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LinuxでAnacondaインストール中に固まった場合の対処

はじめに

CentOSにAnacondaをインストール中にトラブったのでメモ

環境

  • CentOS 7
  • Anaconda 2019.10-Linux-x86_64.

現象

Anaconda3-2019.10-Linux-x86_64.shでインストール中に以下のUnpacking payloadのところで固まった状態になった。

Anaconda3 will now be installed into this location:
/home/kimisyo/anaconda3

  - Press ENTER to confirm the location
  - Press CTRL-C to abort the installation
  - Or specify a different location below

[/home/kimisyo/anaconda3] >>>
PREFIX=/home/kimisyo/anaconda3
Unpacking payload ...

対応

シングルコアの場合に発生するらしい。仮想環境の場合は仮想マシンのCPUのコア数を2以上にするとうまくいった。

参考

https://github.com/ContinuumIO/anaconda-issues/issues/11466

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Apache環境でLaravelの環境構築の時に重要だったコマンド(備忘録)

Apach環境下でLaravelのAPI認証回りの設定を行った

・Passportのインストール

Console
conposer require laravel/passport

・PassportをLaravelに登録する

Console
'providers' => [
                  :
        Laravel\Passport\PassportServiceProvider::class,
    ],

・キーの生成とレコード挿入

Console
php artisan passport:install

・全部のデータベースマイグレーションを最初にロールバックし、それからmigrateコマンドを実行

Console
php artisan migration:reflesh

・シードの実行

Console
php artisan db:seed

・「Personal Access Client」の生成

Console
php artisan passport:client --personal

->クライアント名を入力

よく訪れたディレクトリ

・このディレクトリの所有者権限をLaravelアプリの所有者に変更しないと、「Service Unavailable」エラーに陥ってた

Console
$ ls -l /run/php-fpm/www.sock #権限の確認
$ chown www:www /run/php-fpm/www.sock  #権限の変更

・Laravel環境のエラーログを見たい!ここで代替エラーの原因がわかる(かも)

Console
#アプリのRootディレクトリにて
$ vi storage/logs/laravel

・ここでよくApache環境のエラーを確認した

Console
$ cd /
$ vi /var/log/httpd/error_log

参考サイト

https://www.wakuwakubank.com/posts/457-laravel-passport/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Apacheでの環境構築におけるいろいろなコマンド 

ファイル関連

・ローカル環境からリモート環境へファイル(フォルダ)を転送する

Terminal
$ scp -r 送りたいファイル名 root@ホスト名:送りたいリモートのディレクトリ(Ex.)/home/www)

・ファイルの所有者権限の確認など

Console
$ ls -l 確認したいファイル名

・ディレクトリにあるすべてのファイルの権限を確認したいとき

Console
確認したいディレクトリに移動ののち
$ ll

・ファイルの所有者権限の設定など

Console
$ chown -R 所有者:グループ所有者 ファイル名

-Rを付与することで、ディレクトリ内全体の所有者の設定を変更する

・viでファイルを開いた際に、文字化けしていて、日本語が表示されないとき

Console
:set enc=utf-8

・viでログを確認するときに最新のエラーログを確認したいとき

Console
:$

・Apacheエラーのログを確認する

Console
$ cd /
$ vi /var/log/httpd/error_log

MySQLに関するコマンド

・MySQLでユーザーを作成する際などに、求められるパスワードのセキュリティレベルの設定に関するコマンド

Console
-> global validate_password_policy="LOW or MEDIUM or HIGH"

・MySQLでパスワードのセキュリティレベル一覧を表示するコマンド

Console
-> show global variables like '%validates%';

・MySQLのステータス確認

Console
$ systemctl status mysqld.service

・MySQL ログ

Console
$ cd /
$ cat /var/log/mysql/mysqld.log

・MySQLのユーザー一覧

Console
-> SELECT user, host from mysql.user

・MySQLのユーザー作成

Console
-> create user 'ユーザー名'@'ホスト名' identified by 'パスワード';

・MySQLのユーザーの削除

Console
-> drop user 'ユーザー名'@'ホスト名';

・特定のユーザーにすべての権限を付与

Console
-> grant all privileges on データベース名.* to 'ユーザー名'@'ホスト名';

・MySQLで行った変更の反映

Console
-> FLUSH PRIVILEGES;
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

改行コード変換で悩まない、簡単変換

経緯

改行コード変換で調べるとtrがよく出てくるが、改行コード指定するのだるい&変換うまくいかない場合があった
もっと簡単なの無いかと探したらnkfで簡単に出来るやん

やってみる

環境がMacなのでデフォが改行コードLF

$ file sample
sample: ASCII text
$ od -c sample
0000000   a   a   a   a   a   a  \n   b   b   b   b   b   b  \n   c   c
0000020   c   c   c   c  \n
0000025

CRLFに変換(Windows)

$ nkf -c sample > sample_CRLF
$ file sample_CRLF
sample_CRLF: ASCII text, with CRLF line terminators
$ od -c sample_CRLF
0000000   a   a   a   a   a   a  \r  \n   b   b   b   b   b   b  \r  \n
0000020   c   c   c   c   c   c  \r  \n
0000030

LFに変換(Linux)

$ nkf -d sample_CRLF > sample_LF
$ file sample_LF
sample_LF: ASCII text
$ od -c sample_LF
0000000   a   a   a   a   a   a  \n   b   b   b   b   b   b  \n   c   c
0000020   c   c   c   c  \n
0000025
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

「OZV勉強会LT」「Linux」niceコマンドで知るプロセスと優先順位

社内勉強会LT資料です。


Niceとは

変更したスケジューリング優先度でプログラムを実行する
man page : https://linuxjm.osdn.jp/html/GNU_coreutils/man1/nice.1.html

nice [OPTION] [COMMAND [ARG]...]  

-n, --adjustment=N
優先度に整数値 N を加える (デフォルト: 10)

--help
この使い方を表示して終了する

--version
バージョン情報を表示して終了する 

Niceの使い方

# -n [niceness value] オプション必須
# nicenessの範囲は, 19 ~ -20 ※nicenessが低いほど、優先順位は高くなる

nice -n /something/default_nicevalue_is_10
nice -n 0 /batch_sh/something.sh #niceness valueを0
nice -n 5 zgrep "something text" very_huge_data.log.gz
nice -n 10 mysqldump -u user -p DBNAME TABLE_NAME > OUTPUT_FILE
nice -n -10 /something/this_is_high_priority_execution

プロセスの優先順位確認


psで確認

# PRI, NIを確認

[vagrant@comics ~]$ ps l
F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
0  1000 22121 22120  20   0 124924  4256 -      Ss   pts/0      0:00 -bash
0  1000 22647 22121  20   0 160236  2204 -      R+   pts/0      0:00 ps l

topで確認

# PR, NIで確認

[vagrant@comics ~]$ top
top - 18:36:27 up  2:22,  1 user,  load average: 1.15, 0.77, 0.66
Tasks: 167 total,   3 running,  90 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.4 us,  2.9 sy,  0.0 ni, 94.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  1009004 total,   263660 free,   337808 used,   407536 buff/cache
KiB Swap:        0 total,        0 free,        0 used.   508032 avail Mem

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
22255 apache    20   0  523200  30656  11248 R  20.6  3.0   0:00.69 httpd
 3018 mysql     20   0 2050332 121596  19976 S   0.7 12.1   0:11.54 mysqld
    8 root      20   0       0      0      0 R   0.3  0.0   0:03.04 rcu_sched
 3217 root      20   0  236900  22764   4652 S   0.3  2.3   0:02.13 fluentd
22867 vagrant   20   0  171112   4592   3896 R   0.3  0.5   0:02.46 top

PRとNI


NIとは

プロセスのniceness値、優先順位補正値(ユーザースペース設定値)

PR(PRI)とは

カーネルススケジューラーで参考する、実際のプロセス優先順位
一般プロセスのPRの計算式 : 20 - NI

※ niceを指定せず実行する一般プロセスのPRは20になる。
※ リアルタイムプロセス(rt)の説明はここではしない。


プログラムとプロセス


プログラムとは?

コンピューターが解釈し実行できる命令語コードの集合。
一般的にはファイル形式で保存されている状態。

プロセスとは?

プログラムに対し、実行命令がくだされたタイミングから、生成される資源。

一般的人はプロセス資源はメモリーにロードされ、
OSのプロセススケジューリングのコントロールの制御下で、
上位のメモリと演算装置によって命令が処理される。


プログラムとプロセスの関係

image.png


プロセス優先順位の必要性


なぜ、OSは多数のプログラムを実行・処理できるのか?

基本的に、1CPU(1CORE)は1回1個の命令しか処理できない。(1回 = 1hz, 3Ghz = 1秒で30億回、命令を処理できる)

この制約条件下で、プログラムが同時に処理されていると感じる理由は

  • OSの「プロセススケジューラー」のプロセスコントロール
  • プロセスのステータス変化(Life Cycle)

の概念があって、成り立っている。


プロセススケジューリング

大体のOSは、複数のプロセスを処理するためにいろんなアルゴリズムを採用しているが、基本的にTime Sharingの概念を使っている。複数のプロセスが、優先順位によって、自分の順番で処理可能な時間が設定される。

わかりやすい例が、round-robinアルゴリズム
image.png


プロセスの状態変化(Life Cycle)

image.png

  • creation : あらたらプロセスの生成
  • dispatch : OSスケジューラーがCPUの計算時間を割り当て、処理を実行させること。Running状態に移行
  • timeout : 割り当てられた計算時間の切れ。リソースを返却し、Ready状態に移行
  • blocking/unblocking : プロセスのIO作業発生時にIO処理を待つためblock状態で待機、プロセサで制御

優先順位とスケジューリングがなかったらどうなるか?

複数のプロセスが、同じ時間の割当で、プロセスが増えるほど、全体の処理時間が遅延される。
問題は、重要なプロセス・システムプロセスにも影響が響きシステムの制御命令系が働かなくなること。


実務では


OS環境で何かを実行することは、プロセスになるということを意識する

サーバーで何らかのコマンド、プログラムを実行するということは、コンピューターの限られたリソースの一部を時間という形で占有することを意味する。

一般プロセスの優先順位は指定しない限りは、同じ比率のリソースを当て貼れられるので、プロセスが増えれば増えるほど他のプロセスの処理時間にも影響を及ぼすことになる。

niceは、この時間占有程度を指定し、プロセスごとの処理優先順位を制限的にコントロールできる。

# ありえる?
本番ウェブサーバーで、バッチ処理を追加したら、ウェブサイト全体の応答速度が落ちた。
>>> APACHE(prefork setting)の場合、1リクエストがプロセスになるので、当然プロセス優先順位の影響を受ける。
>>> バッチ処理が、時間に重要な処理じゃなければ、優先順位を下げて実行するようにする(サーバーを分けるまでではない場合)

本番バッチサーバーで、何らかのバッチを手動実行したら、
何時まで絶対周り終わらなきゃいけない、他のバッチの処理時間が遅延された。
>>> 手動で実行するバッチは特別な理由がない場合は、適切に優先順位を下げて実行する

niceの活用例

前提としては、リアルタイムの必要性が低く、重い処理を前提としている。

本番のバッチサーバーで、手動バッチ実行作業が必要

nice -n 10 /batch_sh/huge_time_and_low_priority.sh

mysqldumpで、大容量データのダンプ

nice -n 10 mysqldump -u xxxx -p DBNAME > all_db_dump.sql

本番のウェブサーバー、本番ログサーバーのgrep

nice -n 10 zgrep -E `^\d+$` 1GB_FILE.log.gz

# zgrepと正規表現の処理はCPUに負荷がすごくかかる作業

phpの中でのシステくコールによるバイナリ実行

exec('nice -n 10 /something/command', $result, $ret);

# バッチ処理の中でのシステムコールか、非同期処理の中で必要な場合
# システムコールを使うのに対しては推奨しないため、参考までに見ておくこと

結論

  • APACHEも、バッチも、Shell Commandも、何ら化を実行したら、それはプロセス。
  • プロセスは、限られた時間内で処理・待機を繰り返す。
  • プロセスが増えるほど、全体プロセスの待機時間が伸び、処理自体が遅延される。
  • niceコマンドで、プロセスに当てる時間を制限的にコントロールできる
  • 実行するプログラムの優先度・サーバーへの影響度を考え、niceを活用してみよう

※PS : プログラムの軽量化も大事。


補足: renice

既存のプロセスのnicenessを変更

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む