Python 源命令不生效
我有一个计算机集群,我编写了一个Python脚本来更改主机名;代码如下 让我困惑的是Python 源命令不生效,python,linux,paramiko,Python,Linux,Paramiko,我有一个计算机集群,我编写了一个Python脚本来更改主机名;代码如下 让我困惑的是源代码命令只在某些机器上生效,而不是在所有机器上生效。重复几次之后,所有主机名都会生效[顺便说一句:我可以在/etc/hostname中更改主机名,但主机名服务不会生效。] import paramiko import time import threading import os cmd0 = "sudo source /root/.bashrc" cmd1 = "sudo service hostname
源代码命令只在某些机器上生效,而不是在所有机器上生效。重复几次之后,所有主机名都会生效[顺便说一句:我可以在/etc/hostname
中更改主机名,但主机名服务不会生效。]
import paramiko
import time
import threading
import os
cmd0 = "sudo source /root/.bashrc"
cmd1 = "sudo service hostname stop"
cmd2 = "sudo service hostname start"
def executeit(ip):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, 22, "root")
ssh.exec_command(cmd0)
stdin, stdout, stderr = ssh.exec_command(cmd1)
out = stdout.readlines()
for o in out:
print(o)
time.sleep(1)
ssh.exec_command(cmd2)
ssh.close()
print("=======")
def main():
fr = open("info.txt", "r")
contents = fr.read().splitlines()
fr.close()
for ip in contents:
t = threading.Thread(target=executeit, args=(ip,))
t.start()
main()
您确定bash中所有机器上的默认shell吗<代码>源代码
仅在bash中有效;并且应该避免。您的代码中不使用源代码,这会使问题变得不清楚。另外,您不需要sudo
,因为您使用ssh作为root
@BurhanKhalid。我所有的机器都是ubuntu12.04服务器版。@JohnZwinck噢,这是我的错误,我写了服务器脚本。source/etc/.bashrc命令不会在所有计算机上生效,sudo服务主机名也会在所有计算机上生效。我的答案是正确的。没有人在这里提到过这一点:如果运行sudo source/some/script
,它不会执行您可能期望的操作——虽然脚本中的任何命令都在运行,但您将无法利用脚本设置的任何变量,因为它只会影响sudo
设置的环境。