set*_*thu 5 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 tasktracker')
Run Code Online (Sandbox Code Playgroud)
在此之后,我必须以root身份执行一些命令,然后再次成为用户"hadoop"并执行:
os.system('bin/hadoop-daemon.sh stop tasktracker')
Run Code Online (Sandbox Code Playgroud)
我这里有三个问题,
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')
Run Code Online (Sandbox Code Playgroud)
或者如果你没有sudo,但有su
os.system('su hadoop -c "bin/hadoop-daemon.sh stop tasktracker"')
Run Code Online (Sandbox Code Playgroud)