ある日いきなりサーバー管理者に任命されたら
サーバー上で稼働しているサービスの種類を調べる方法
前ページにて「実際にサーバーにログインしてみてどんなサービスやバッチが動いているのかまで確認していく」と書きましたが、このページではその具体的な方法を簡単に記してみたいと思います(なおここでは誌面の都合上、OSをLinuxに限定します)。
サーバーがネットワークを介して提供しているサービスの種類を調べるにはどうしたらよいでしょうか。この場合はTCP/UDPのListenポートを見ます。
# netstat -lnp
と打つと
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 31074/mysqld
tcp 0 0 :::22 :::* LISTEN 2284/sshd
tcp 0 0 :::80 :::* LISTEN 26966/httpd
tcp 0 0 :::443 :::* LISTEN 26966/httpd
のように返ってきます。これを見ると、例えばmysqldがTCP3306番ポートで、httpdが80番ポートでListenしている、といったことがわかります。
次にhttpdの実体は何か知りたい場合はプロセス情報を見ます。
# ps -ef | grep httpd
と打つと
# ps -ef|grep httpd
root 1663 1603 0 23:27 pts/0 00:00:00 grep httpd
root 26966 1 0 Jun15 ? 00:00:21 /usr/sbin/httpd
apache 27163 26966 0 04:02 ? 00:00:01 /usr/sbin/httpd
apache 27164 26966 0 04:02 ? 00:00:01 /usr/sbin/httpd
apache 30781 26966 0 05:58 ? 00:00:00 /usr/sbin/httpd
と返ってきます。この時点でApacheらしいことは判明しましたが、念のため確かめてみましょう。
# /usr/sbin/httpd -v
と打つと
Server version: Apache/2.2.3
Server built: May 28 2009 12:50:07
やはりApacheでした。この要領でサービスを特定していくことができます。
スケジュール処理の種類を調べる
サーバーは外部に対してサービスを行うだけでなく、バッチ処理等を行っている場合がありますので、それらも調べます。
UNIX系OSの場合はスケジュール処理をcronで行うので、cronが設定されているファイルを調べます。
# ls -l /var/spool/cron/
と打つと
-rw------- 1 root root 178 Jun 22 16:56 root
-rw------- 1 finance root 254 Jun 30 22:52 finance
-rw------- 1 human root 222 Jun 30 22:53 human
-rw------- 1 sales root 152 Jun 30 22:53 sales
次に
# more /var/spool/cron/sales
と打つと
*/30 * * * * /bin/sh /home/sales/Batch/refresh_salesdb.sh > /dev/null 2>&1
0 0 1 * * /bin/sh /home/sales/Batch/refresh_merchantinfo.sh > /dev/null 2>&1
この例の場合は2つのバッチファイルが存在しています。上のバッチは30分ごと、下のバッチは毎月1日の0:00に実行されるようになっていることがわかります。この例の場合はバッチファイル名から推測して、なんとなく営業データベースの情報を更新するバッチファイルと、取引先情報を更新するバッチファイルに見えます。
このバッチファイルが何をするためのものなのかを知るためには、このバッチファイルを実際に分析する方法もありますが、バッチファイルに関するドキュメントを探す方法もあります。サーバー管理者がプログラムの解析まで行うのは好ましくないため、もしバッチファイルに関するドキュメントが存在しないのであればこの機会にドキュメント化しておいて、今後のサーバー管理に役立てることをお勧めします。