Apache2などの制御にPerlやShellを使う

2010.10.10 0:32
 特に大量にやらなくてはいけない作業というものがなかったのでApacheとかPostfixとかをプログラムで制御するということはあまりしてきませんでしたが、やってみると結構便利です。cronを使ってもできますが、何かのきっかけでスクリプトを実行した際には何事もまとめて片付けてしまいたいということで、サーバーの制御にいろいろと使う方法です。
 こういったサーバーの制御には基本的にはその実行ユーザー(apacheとかpostfixとか)を使用するかrootで行う必要があります。通常のログインユーザーみたいなもの(Ubutuの場合だと自分が現在使用しているユーザー)からは実行できないのでご注意。また、Root権限で実行してしまうスクリプトなので、使い方に注意してください。実行してしまったら一気に実行されてしまいます。

Shellスクリプトを使う

 例えばApacheの再起動にshell scriptを使用する場合は、以下のように書きます。
#!/bin/bash

# Apache2 Restart
/etc/init.d/apache2 restart
exit
 とても簡単です。
 まずは、#!/bin/bashというように正しいパスを書きます。環境によって違うと思うのでご注意。次にApacheの再起動のコマンドをそのまま書きます。で、終わったらexitです。かなり簡単です。実際に実行する際には、端末から操作します。例えばこのファルをapache_restart.shとして保存した場合には、
# bash apache_restart.sh [Enter]
* Restarting web server apache2
 ... waiting   
で実行します。通常のコマンド(# /etc/init.d/apache2 restart [Enter])を実行するのと全く同じようになります。このファイルをcronなどで実行させると、一定時刻に自動的に再起動を行ってくれます。

Perlを使う

 上記と殆ど違いがないわけですが、時としてperlの中に組み込みたい場合はそのままperlで書く方がやりやすいです。しかしPerlのコマンドにはApacheの再起動はないので、Shellのコマンドとして呼び出して使うことになります。ここでは、標準出力に実行結果を吐き出せるようにバッククォートを使用して実行します。
#!/usr/bin/perl

# Apache2 Restart
my $result = `/etc/init.d/apache2 restart`;
print "$result\n";
exit;
 バッククォート内にコマンドには、Apache2の再起動コマンドをそのまま入れてあげます。後は、変数で実行結果を得てから標準出力に出してあげるだけです。かなり簡単です。ファイル名を、apache_restart.plなどとして保存し、同様に端末から実行すると、
# perl apache_restart.pl
 * Restarting web server apache2
 ... waiting    ...done.
というようにちょっと違う出力がなされますが、実行結果は同じになります。
 こういうのたくさん作っておくと結構便利です。






プロフィール



  • Name :: 山上オサム ♂(39)
  • Hobby :: 武術
  • Work :: Web Designer