特定のタスクを別のユーザーが所有する他の特定のbashスクリプトに委任するbashバックアップスクリプトをroot(cron)として実行しています。(簡略化された例、原則として、rootとして実行する必要があるものがあり、さまざまなタスクが適切な環境(oracle、amazon、...)を持つユーザーに委任されます。
mkdir -p /tmp/backup$NAME
su - oracle -c "~/.backups/export-test.sh"
tar cf /tmp/backup/$NOW.tar /tmp/backup$NAME
su - amazon upload_to_amazon.sh /tmp/backup/$NOW.tar
このスクリプト自体は、ユーザーoracleとしていくつかのタスクを実行します。
mkdir -p $TMP_LOCATION
cd ~/.backups
exp $TMP_LOCATION/$NAME-$NOW
Pythonでこの動作を模倣しようとすると、次のことがわかりました(ルートとしてcronから開始)
name = "oracle"
# part run as root
os.makedirs(tmp_backup + name)
os.setegid(pwd.getpwnam(name)[3])
os.seteuid(pwd.getpwnam(name)[2])
# part run as oracle
os.makedirs(tmp_location)
os.chdir(os.path.expanduser("~{user}/.backups".format(user=name)))
subprocess.check_call(["exp",
"os.path.join(tmp_location, name+'-'+now)"
])
su-を使用する場合のbashでは、実際の新しいシェルが呼び出され、そのユーザーのすべての環境変数が設定されます。Pythonスクリプトでこれをどのように改善できますか?私が従うことができる標準的なレシピはありますか?私は環境変数、umask、...を考えています。
それが問題になる可能性がある場合、環境はSolarisです。