2

rootのみがmailxを実行でき、opsのみがプロセスを再開できる状況があります。プロセスを再開し、そのことについての電子メールを送信する自動化されたスクリプトを作成したいと思います。

関数を使用してこれを試してみると、関数が「見つかりません」です。

私は次のようなものを持っていました:

#!/usr/bin/bash

function restartprocess {
/usr/bin/processcontrol.sh start
}

export -f restartprocess

su - ops -c "restartprocess"

mailx -s "process restarted" myemail.mydomain.com < emailmessage.txt

exit 0

関数が見つからなかったとのことです。トラブルシューティングの結果、opsユーザーのデフォルトシェルはkshであることが判明しました。

スクリプトをkshで実行するように変更し、「export-f」を「typeset-xf」に変更しようとしましたが、それでも関数が見つかりませんでした。のように:ksh:exportfunctionが見つかりません

私はついにあきらめて、スクリプト(関数に直接含まれていた)を呼び出したところ、それは機能しました。それは次のようなものでした:

su - ops -c "/usr/bin/processcontrol.sh start"

(これはもちろん、実際のスクリプトを単純化したものです)。

ユーザーopsのデフォルトシェルがkshであり、それを変更したりsudoersを変更したりできない場合、opsとしてsu(およびopsのプロファイルを実行する必要がある)してその関数を実行できるように関数をエクスポートする方法はありますか?

opsユーザーに、実行したいスクリプトのディレクトリへのアクセス許可と、そのスクリプトを実行するためのアクセス許可があることを確認しました。

これについての教育をいただければ幸いです。

4

1 に答える 1

0

関数のエクスポートには多くの制限があります。特にsu - ...、異なるアカウントや異なるシェルと組み合わせる場合はそうです。

代わりに、スクリプトを裏返しにして、実行するすべてのコマンドを呼び出し側シェルの関数内に配置します。

次のようなもの: (bash と ksh の両方)

#!/usr/bin/bash

function restartprocess {
    /bin/su - ops -c "/usr/bin/processcontrol.sh start"
}

if restartprocess; then
    mailx -s "process restarted" \
        myemail@mydomain.com < emailmessage.txt
fi

exit 0    

これにより、関数内のすべての/bin/su処理が非表示になり、restartprocess自由に拡張できます。

于 2012-09-11T01:06:42.797 に答える