J'ai un script de sauvegarde bash exécuté en tant que root (cron) qui délègue certaines tâches à d'autres scripts bash spécifiques appartenant à différents utilisateurs. (Exemple simplifié, le principe est, certaines choses doivent être faites en tant que root, différentes tâches sont déléguées aux utilisateurs avec l'environnement approprié (oracle, amazone, ...)Configuration de l'environnement lors de la modification d'un autre utilisateur
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
Ce script se fait alors quelques tâches utilisateur oracle:
mkdir -p $TMP_LOCATION
cd ~/.backups
exp $TMP_LOCATION/$NAME-$NOW
lorsque je tente d'imiter ce comportement en python je suis venu avec les éléments suivants (démarré à partir cron en tant que 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)"
])
en bash lors de l'utilisation su -, un Un nouveau shell réel est appelé et toutes les variables d'environnement de cet utilisateur sont définies. Comment puis-je améliorer cela pour mon script python? Y a-t-il une recette standard que je peux suivre? Je pense à des variables d'environnement, umask, ...
l'environnement est Solaris si cela peut avoir de l'importance.
En ce qui concerne (1), vous pouvez exécuter .profile comme un sous-processus toute la journée et il ne modifiera pas l'environnement du parent - Ce n'est pas vraiment une option. (3) est meilleur, mais souffre du problème potentiel que les variables d'environnement d'Oracle peuvent être remplacées par celles d'Amazon. – bstpierre
(3) ne donne pas la séparation des environnements utilisateur: lors de l'exécution de la partie oracle, les clés amazon sont également dans l'environnement – Joram
@Joram: Alors? Quel problème cela cause-t-il? –