cygserverシャットダウン | ||||
1) | postgresの実行中の情報表示 | |||
psコマンドで実行中のプロセスの情報を表示できますが、その中からpostgresの情報のみを表示するには下のようにパイプを使って、psの標準出力をgrepの標準入力とします。postgersが実行中の場合は下のように表示され、続いて終了コードを表示すると0になっています。(grepの終了コードです。)postgresが実行中でないと終了コードは1になっています。 | ||||
Owner@FMIL002 ~/bin $ ps | grep postgres 4048 1 3744 1528 con 1003 00:09:56 /usr/sbin/postgres 2168 4048 3744 2168 con 1003 00:09:58 /usr/sbin/postgres 1656 4048 3744 1656 con 1003 00:09:58 /usr/sbin/postgres 716 1656 3744 716 con 1003 00:09:58 /usr/sbin/postgres Owner@FMIL002 ~/bin $ echo $? 0 |
||||
ps | grep postgres の終了コードが0の場合は、postgresが実行中と判断できるのでpostgresを終了させるコマンドを実行するようにプログラを作成します。(実行中で無い場合でも終了コマンドを入力しても問題ないのですが。) |
||||
2) | cygserverの実行中の情報表示 | |||
同様にcygserverが実行されているか確認します。 |
||||
|
||||
3) | cygserverのPIDの表示 | |||
cygserverを終了させるためにはcygserverのPIDをkillの引数に指定しないといけません。PIDを下のように取得します。3個コマンドを連結して最終的にPID(=3508)を取得します。「-c6-9」は桁位置です。これは自分で数えます。左端は1です。下はXPの場合です。98だとPIDの桁数が異なるので「-c6-9」部分は別の値になります。 | ||||
|
||||
4) | シェルスクリプト | |||
実際のシェルスクリプトは下になります。binの中に、killcygserver.shのファイル名で作成します。 | ||||
#!/usr/bin/bash ps | grep postgres if [ $? = 0 ] then /usr/sbin/pg_ctl stop else echo 'postgres not found' fi ps | grep cygserver if [ $? = 0 ] then kill `ps | grep cygserver | cut -c6-9` else echo 'cygserver not found' fi exit 0 |
||||
1行目の「#!/usr/bin/bash」はこのスクリプトをbashに実行させることを指示するものです。bashが新しく起動されこのスクリプトを実行します。bashの代わりにcshやperlなどと記述するとcshまたはperlが起動されこのスクリプトを実行します。(スクリプトの仕様がbashとことなるのでエラーとなりますが。)postgresまたはcygserverが実行中でないと「not found」のメッセージが表示されます。「kill `ps | grep cygserver | cut -c6-9`」は、「ps | grep cygserver | cut -c6-9」を逆引用符「`」でくくることで「ps | grep cygserver | cut -c6-9」の実行結果を「kill」コマンドに取り込んでいます。最後の「exit 0」で終了コード0で終了します。 |
||||
5) | 実行権限を与える | |||
シェルスクリプトを作成しても実行権限がありません。chmodコマンドで実行権限のあるファイルにします。 | ||||
$ ls -l killcygserver.sh -rw-r--r-- 1 Owner なし 239 Dec 5 00:56 killcygserver.sh Owner@FMIL002 ~/bin $ chmod 744 killcygserver.sh Owner@FMIL002 ~/bin $ ls -l killcygserver.sh -rwxr--r-- 1 Owner なし 239 Dec 5 00:56 killcygserver.sh |
||||
chmodはファイルのアクセスモードを設定します。初めモードが「rw-r--r--」であったものが「rwxr--r--」に変わっています。3桁目(左端から4桁目)に「x」が表示されているファイルは自分(オーナー)で実行できます。左端から2桁目〜10桁目の9桁がアクセスモードを表しています。9桁の左から3桁がオーナー、真ん中の3桁がグループ、右の3桁がその他のユーザーのアクセスモードを表します。3桁の左端の桁はリード権限、真ん中の桁はライト権限、右端は実行権限を現します。7は3桁が全てオンであることを意味します。 | ||||
6) | 実行 | |||
作成したシェルスクリプトを実行して、psコマンドでpostgres、cygserverが終了されているか確認します。 | ||||
Owner@FMIL002 ~/bin $ killcygserver.sh 4048 1 3744 1528 con 1003 00:09:56 /usr/sbin/postgres 2168 4048 3744 2168 con 1003 00:09:58 /usr/sbin/postgres 1656 4048 3744 1656 con 1003 00:09:58 /usr/sbin/postgres 716 1656 3744 716 con 1003 00:09:58 /usr/sbin/postgres waiting for postmaster to shut down.... done postmaster stopped 3508 1616 3508 3252 con 1003 00:08:53 /usr/sbin/cygserver Owner@FMIL002 ~/bin $ cygserver: Shutdown finished. [1]+ Done /usr/sbin/cygserver Owner@FMIL002 ~/bin $ ps PID PPID PGID WINPID TTY UID STIME COMMAND 1616 1 1616 1616 con 1003 12:35:12 /usr/bin/bash 3900 1616 3900 2424 con 1003 01:10:51 /usr/bin/ps Owner@FMIL002 ~/bin |
||||
7) | alias(別名) | |||
/home/Owner/.bashrc に下の行を追加すると次回cygwinを起動後。end_cserverと入力するとkillcygserver.shが実行されます。 | ||||
alias end_cserver=/home/Owner/bin/killcygserver.sh |
||||
5節 シェルスクリプト cygserverシャットダウン | 5節 シェルスクリプト |
cygserverをシャットダウンする手順は、まず、postgresを「/usr/sbin/pg_ctl stop」と入力して終了します。次にpsコマンドでcygserverのPIDを表示させて「kill PID」と入力して終了させます。この手順を実行してくれるシェルスクリプトを作成します。 |