我正在编写一个简单的脚本来重启 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)。
感谢您的帮助。
- 塞图
最佳答案
你可以使用:
os.system('sudo -u hadoop bin/hadoop-daemon.sh stop tasktracker')
或者如果你没有 sudo 但有 su
os.system('su hadoop -c "bin/hadoop-daemon.sh stop tasktracker"')
关于python - 在python中更改用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8025294/