2015年6月28日日曜日

指定したユーザーで実行したプログラム(su - user -c program)のPIDファイルを作成する


もっとカッコイイ方法はあると思いますが、とりあえずこんな感じで...
# ./sleep.sh /var/run/sleep.pid

sleep.sh


まず、指定ユーザー(sleep)がプログラム(sleep 60)を実行した後に
"/tmp"下にPIDファイルを書き出しています。
(パーミッションの問題で直接"/var/run/"下に書き出せない)

そして、"root"で"/var/run/"下にPIDファイルを移動しています。

ポイントは、プロセスIDを取得する変数"$!"
をバックスラッシュでエスケープ(\$!)しているところでしょうか?

上記コマンド実行後、下記のように"sleep"ユーザーで実行されているのがわかり
# ps aux | grep sleep
sleep     2822  0.0  0.0 107888   620 ?        S    23:11   0:00 sleep 60
root      2825  0.0  0.0 110400   860 pts/0    S+   23:11   0:00 grep sleep
プロセスIDも問題なく書きだされていることが確認できます。
# cat /var/run/sleep.pid 
2822

0 コメント: