Я пишу простой скрипт, который перезапускает подчиненное устройство hadoop.В сценарии я должен сделать некоторые начальные изменения как пользователь root.После этого мне нужно перейти к пользователю «hadoop» и выполнить набор команд.Я использовал os.system для запуска команд, но я сомневаюсь, что это работает хорошо.Например:
uid=pwd.getpwnam('hadoop')[2]
os.setuid(uid)
os.system('whoami')
os.chdir('/home/hadoop/hadoop/')
os.system('bin/hadoop-daemon.sh stop tasktracker')
Снова я должен выполнить некоторые команды от имени root после этого и снова стать пользователем "hadoop" и выполнить:
os.system('bin/hadoop-daemon.sh stop tasktracker')
У меня три вопроса здесь,
Является ли os.system лучшей командой, которую я могу использовать для выдачи команд linux?
Я могу перейти от пользователя root к пользователю hadoopпо приведенным выше командам, но я не могу перейти к пользователю root (я могу понять, что будут проблемы с безопасностью, если они позволят это, я хочу знать, есть ли возможность сделать это, по крайней мере, путем передачи пароля)?
Работает ли os.setuid ()?whoami печатает пользователя hadoop, но процесс «tasktracker» не останавливается с помощью этих команд, но если я выполняю те же команды вручную, он работает нормально (я использую «su hadoop» вместо setuid, когда пытаюсь выполнить его вручную).*
Спасибо за вашу помощь.