Я пишу простой скрипт, который перезапускает подчиненное устройство 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')
У меня здесь три вопроса,
Is os.system - лучшая команда, которую я могу использовать для выполнения команд linux?
Я могу перейти с пользователя root на пользователя hadoop с помощью приведенных выше команд, но я не могу перейти на пользователя root (я понимаю, что будет безопасность проблемы, если они разрешают это, я хочу знать, есть ли возможность сделать это, по крайней мере, передав пароль)?
Работает ли os.setuid ()? whoami печатает user hadoop, но процесс «tasktracker» не останавливается с помощью этой команды, но если я выполняю те же команды вручную, он работает нормально (я использую «su hadoop» вместо setuid при тестировании вручную).
Спасибо за вашу помощь.