- PR -

scriptコマンドを"su - " の際は無視させたい

1
投稿者投稿内容
やま
会議室デビュー日: 2007/01/23
投稿数: 7
投稿日時: 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が起動したままになってしまいます。

どなたか、解決策をご存知の方教えていただけないでしょうか?
よろしくお願いいたします。
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2007-04-13 18:29
suのプロセスが実行中で判断

ps -C su
if [$? eq 0]; then
`su実行中
else



これぐらいしか、思いつきませんでした。
koji
常連さん
会議室デビュー日: 2004/11/04
投稿数: 36
お住まい・勤務地: 北海道
投稿日時: 2007-04-13 19:04
if [ ""$PS1 != "" ]; then
  対話的な処理
fi

未確認ですが
このようにPS1が設定されている(インタラクティブな状態)の時だけ
実行するようにするとうまく動くかもしれません。
やま
会議室デビュー日: 2007/01/23
投稿数: 7
投稿日時: 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などリモートログイン中・コンソールでログイン中などを判別するのがいいのかも知れません。
また調査してみます。


ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2007-04-17 11:10
引用:

>ps -C su
>if [$? eq 0]; then
>`su実行中
>else
>:
suでの実行中であることの判別ができました。

ただ、もともとスクリプト内で、su - username -C "comm" を実行する場合のみ無視させたかったのですが、
運用上、他ユーザにsuすることがあり、この方法ではこの場合もログがとれないため、また悩んでおります。

なので、sshなどリモートログイン中・コンソールでログイン中などを判別するのがいいのかも知れません。
また調査してみます。




ps -C su を
ps -C su -f | grep su.*¥-c.*
に変更すれば、「su - username -C "comm"」の場合のみを判定できると思います。
やま
会議室デビュー日: 2007/01/23
投稿数: 7
投稿日時: 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

スキルアップ/キャリアアップ(JOB@IT)