我正在编写一个简单的脚本,该脚本可以重新启动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"')