UNIX/Linuxサーバーの運用管理者はシェルスクリプトを書けないといけない。
サーバーの運用作業で、同じコマンド作業を繰り返すとか、人がいない時間にスケジューラーを使って何か自動実行したい場合は、OSに付属しているスクリプト言語を使うのが鉄板です。
Linuxだと bashスクリプト、Windowsならコマンドスクリプトか Powershellスクリプトですね。
ここでは Linuxでの(bashの)シェルスクリプトの話になりますが、シェルスクリプトって奥深過ぎてとても私の知見で語り尽くせるものではありません。
他のブログ等をご参照下さい。
とは言え、1から 100まで知らないと使えないものではないので、理解できた箇所から使っていけば良いと思います。
シェルスクリプトに関する書籍やブログは数多くありますが、そこそこ枯れている技術だけに殆ど新規の変更が入りませんので、部分的に書かれたブログを渡り歩くより、古本でも大丈夫なので体系的に纏められた書籍を 1冊買うのが良いと思います。
シェルスクリプトの詳細は書籍を参照していただくこととして、ここではどういうユースケースがあるのかを書きたいなと。
私が現場で経験したものでは、夜間のバックアップで使っていました。
例えば Oracleデータベースのバックアップなんですが、以下のような作業になるんですね。
- Tomcat等のアプリケーションサーバープロセスを止める
- Oracleデータベースを止める
- Oracleデータベースのバックアップをする(実体は対象ファイルのコピー)
- Oracleデータベースを起動する
- Tomcat等のアプリケーションサーバープロセスを起動する
それぞれの行がコマンドを実行するものですが、夜中にこの 5つのコマンド実行を人手を介してやるのではそのための人件費が必要になるし、手作業だとミスの可能性を取り除くことができません。
スクリプトにして自動実行することで、人も必要なければミスもなくなる、というわけです。
シェルスクリプトは複数のコマンド実行をプログラムの様に書いて一括処理できるもので、制御構文(繰り返し・分岐)もできますし、変数も使えりゃ関数を作ることもできます。
プログラミング言語には至りませんが、シェルスクリプトを頑張って書けば相当な事までできます。
シェルスクリプトのお勉強はどうするべきか。
処理内容により、2つのアプローチがあると思います。
処理内容が上から下に順番に 1つずつ実行するだけの場合は、すぐシェルスクリプトのお勉強へ。
制御構文を使うような複雑な処理をしなければならいなら、先に何か 1つで良いのでプログラミング言語をやっておく方が遠回りに見えて却って理解が早まると思います。
さて、何か作ってみるものはないかな?と探してみますと、このホームページで良く出てくる Ubuntu Serverインストール後の日本語環境設定が良さげです。
「Ubuntu Serverの初期設定」に書いている一連の作業をシェルスクリプトにしてみようかな、と。
こんな感じになるでしょうか。
シェルスクリプトは単なるテキストファイルですから、vimで書きました。
[after_install.sh]
#!/bin/bash
sudo apt -y update
sudo apt -y upgrade # ←この行ではもしかすると稼働している常駐プロセスの再起動についてインタラクティブに聞いてきてしまい自動にならんかも知れません(試してない)
sudo apt install -y language-pack-ja-base language-pack-ja
sudo localectl set-locale LANG=ja_JP.UTF-8 LANGUAGE="ja_JP:ja"
sudo timedatectl set-timezone Asia/Tokyo
sudo hostnamectl set-hostname UbuntuServer2204
sudo echo "NTP=ntp.nict.jp" >> /etc/systemd/timesyncd.conf
ファイルができたら、Linuxのデフォルトでは実行権限がついてないでしょうから、chmodコマンドを使いましょう。
chmod u+x after_install.sh
ファイル名を入力してEnterで実行です。
after_install.sh
単にコマンド実行を順番に並べているだけですが、手動作業でままある不注意からの入力ミスは防げます。
チョロくてもミスを防ぐ上では、シェルスクリプトによる作業の自動化は効果があります。
世の中にはカッコイイ自動化ツールがありますが、シェルスクリプトだって立派に自動化に寄与するものですよ。
シェルスクリプトってキラキラしてないので余り目立ちませんけど、サーバーエンジニアならまずはこれでやってみることをお勧めします。
その後で Ansibleなどを使ってみると、それぞれお良さを実感できるはずですよ。
一体何が言いたいのかよく分からなくなってきましたが、この辺で。
どの本って訳じゃないですが、書籍で 1冊は持っておきたいです。
手の届くところに置いておくのが Good!
意外とシェルスクリプト特化本って少ないんですね…。(昔はいっぱいあった)