Linuxサーバーを定期的に再起動するスクリプトを紹介します。定期的に再起動するという処理はシステム構築においては、運用の中で定義される「死活監視」に関連してくる話になります。
●シェルとは?シェルスクリプトとは?
シェルスクリプトの前にシェルについての概要を記載します。シェルとはユーザーが入力したコマンドを解釈し、カーネルへの橋渡しを行うプログラムです。ユーザが直接OSを操作してエラーや不整合にならないようにOSを守る役割も果たすことからシェル(殻)という名前になったとされています。
シェルスクリプトはスクリプト言語の一種で、シェル(インタプリタ)にて解釈できる命令(コマンド)を組み合わせて作られるプログラムです。拡張子は「.sh」で、プログラミングのように繰り返しや分岐処理を行う事が出来ます。またコンパイルを行わず、インタプリタ(シェル)を指定してソースファイルを上から順番に直接に実行するため、コンパイル型の言語と比較すると速度が遅くなる傾向にあります。また参考までにWindows OSの場合、シェルスクリプトはバッチ処理と呼ばれ「.bat」拡張子で作成されます。
そして「カーネル」はOSの中核をなす部分で、ハードウェアとソフトウェアの仲介役としての各種機能を提供します。具体的には「プロセス管理」(CPUにプロセスを割り当てたり)や「メモリ管理」」や「ファイルシステム」などがあります。「メモリ管理」について、物理メモリと仮想メモリを利用するに際して、物理メモリと紐づく仮想的なアドレスを割り当てるが、その管理を行う。
●シェルスクリプトの一番最初の文言(「#!/bin/sh」など)について
シェルスクリプトの最初にある「#!」から始まる文言は”Shebang”と呼ばれ、実行時のインタプリタの指定を行っています。
●インタプリタについて
インタプリタはプログラムを”実行する都度”、そのプログラムを読み込み、CPUが処理可能な機械語に変換する役割を果たします。一方でコンパイラはプログラミング言語を”事前に”機械語に一括変換し、その状態でCPUに処理命令を行います。
それでは簡単ですがLinuxサーバを定期的に再起動するシェルスクリプトを紹介します。
1.usr/bin の直下にreboot.shを作成
cd /usr/bin vi reboot.sh
2.以下のコマンドを記述
#!/bin/sh shutdown -r now
3.etcの直下にcrontabに以下を記述
20 * * * * root sh /usr/bin/reboot.sh
ファイル全体では下記の様になります。
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 20 * * * * root sh /usr/bin/reboot.sh
設定項目は左から「分」「時」「日」「月」「曜日」です。上記の例だと、毎日の毎時20分(13時20分→14時20分→15時20分・・・)に再起動する。
4.結果確認
再起動されているかどうかは下記より確認します。
last reboot
表示結果(例)
reboot system boot 2.6.32-642.15.1. Sun Jun 11 11:21 - 11:40 (00:19) reboot system boot 2.6.32-642.15.1. Sun Apr 9 16:49 - 11:20 (62+18:30) reboot system boot 2.6.32-642.15.1. Sun Mar 26 17:54 - 11:20 (76+17:25) reboot system boot 2.6.32-642.11.1. Sun Mar 26 17:51 - 17:53 (00:02)
↓オススメの書籍