- - PR -
scriptコマンドを"su - " の際は無視させたい
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-04-13 14:29
やまと申します。
以下の内容を/etc/profileに追加し、ログイン時に自動的にscriptコマンドによる実行履歴をとるようにしています。 SCRIPTLOGDIR="/home/.scriptlog/" if [ ! -d "$SCRIPTLOGDIR" ]; then echo 'Not Found : '$SCRIPTLOGDIR | mail -s "scriptlog" root else if [ ! -d "$SCRIPTLOGDIR/$USER" ]; then mkdir -p $SCRIPTLOGDIR/$USER chmod 700 $SCRIPTLOGDIR/$USER fi script -a -q -f $SCRIPTLOGDIR/$USER/`date '+%Y%m%d%H%M%S'`.log exit fi しかし、su - username -c command のような際にも動いてしまい、 この場合exitせず、scriptが起動したままになってしまいます。 どなたか、解決策をご存知の方教えていただけないでしょうか? よろしくお願いいたします。 | ||||
|
投稿日時: 2007-04-13 18:29
suのプロセスが実行中で判断
ps -C su if [$? eq 0]; then `su実行中 else : : これぐらいしか、思いつきませんでした。 | ||||
|
投稿日時: 2007-04-13 19:04
if [ ""$PS1 != "" ]; then
対話的な処理 fi 未確認ですが このようにPS1が設定されている(インタラクティブな状態)の時だけ 実行するようにするとうまく動くかもしれません。 | ||||
|
投稿日時: 2007-04-16 20:41
ゆうじゅんさん、kojiさん ありがとうございます。
早速試してみました。 >if [ ""$PS1 != "" ]; then > 対話的な処理 >fi /etc/profileに、 if [ ! "$BASH" = "" ]; then PS1="[\\u@\\h \\W]\\\\$ " export PS1 shopt -s cdspell fi という記述があり、必ずsetされるようです。 >ps -C su >if [$? eq 0]; then >`su実行中 >else >: suでの実行中であることの判別ができました。 ただ、もともとスクリプト内で、su - username -C "comm" を実行する場合のみ無視させたかったのですが、 運用上、他ユーザにsuすることがあり、この方法ではこの場合もログがとれないため、また悩んでおります。 なので、sshなどリモートログイン中・コンソールでログイン中などを判別するのがいいのかも知れません。 また調査してみます。 | ||||
|
投稿日時: 2007-04-17 11:10
ps -C su を ps -C su -f | grep su.*¥-c.* に変更すれば、「su - username -C "comm"」の場合のみを判定できると思います。 | ||||
|
投稿日時: 2007-04-19 15:22
解決しました!
/etc/profile に #su -c "comm" の場合は無視 ps -C su -f | grep su.*\\-c.* > /dev/null if [ $? -eq 1 ]; then SCRIPTLOGDIR="/home/.scriptlog/" if [ ! -d "$SCRIPTLOGDIR" ]; then echo 'Not Found : '$SCRIPTLOGDIR | mail -s "scriptlog" root else if [ ! -d "$SCRIPTLOGDIR/$USER" ]; then mkdir -p $SCRIPTLOGDIR/$USER chmod 700 $SCRIPTLOGDIR/$USER fi script -a -q -f $SCRIPTLOGDIR/$USER/`date '+%Y%m%d%H%M%S'`.log exit fi fi と書いてやることで、su -c "Comm" のみを無視できました。 ありがとうございました! |
1