在python中更改用户
我正在编写一个简单的脚本,重新启动hadoop从机。在脚本中,我必须作为root用户进行一些初始更改。之后,我必须切换到用户“hadoop”并执行一组命令。我使用os.system运行命令,但我怀疑它是否运行良好。例如:在python中更改用户,python,linux,hadoop,os.system,Python,Linux,Hadoop,Os.system,我正在编写一个简单的脚本,重新启动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 task
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('sudo -u hadoop bin/hadoop-daemon.sh stop tasktracker')
或者如果你没有sudo,但是有su
os.system('su hadoop -c "bin/hadoop-daemon.sh stop tasktracker"')
使用fabric library可以更干净地实现此类脚本: 此外,它还提供了漂亮的命令行界面和通过ssh管理远程服务器的功能。所有python都是可用的,因此您可以连接到数据库或导入任何需要的内容
与其他用户一样运行命令的问题可以通过sudo命令和user arg实现:使用“su”比使用os.setuid()切换用户ID要好得多 为什么?
- “su”将正确设置登录凭据,包括组ID和补充组
- “su”还可以做其他有用的事情,比如设置环境变量(特别是如果使用su-)。也许它还会根据limits.conf设置ulimit限制