我有一个 bash 备份脚本以 root (cron) 身份运行,它将某些任务委托给不同用户拥有的其他特定 bash 脚本。(简单的例子,原则是,有些事情必须以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 作为 root 开始)
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)"
])
在 bash 中使用 su - 时,会调用一个真正的新 shell,并设置该用户的所有环境变量。如何为我的 python 脚本改进这一点?有我可以遵循的标准食谱吗?我正在考虑环境变量,umask,...
如果这可能很重要,环境是 Solaris。