尝试在安装后使用python2.7重新启动远程系统

尝试在安装后使用python2.7重新启动远程系统,python,Python,我是python(2.7)的新手,试图在需要验证远程服务器(CentOS7)并执行某些操作的项目工作中帮助我的组织 根据一些标准。 在服务器上进行更新和安装后,我希望执行干净的重新启动,但有时我发现重新启动本身被卡住了 这就是我所拥有的 if uptime_seconds < 1000: uptime_string = str(datetime.timedelta(seconds=uptime_seconds)) #Convert time into sec do_log

我是python(2.7)的新手,试图在需要验证远程服务器(CentOS7)并执行某些操作的项目工作中帮助我的组织 根据一些标准。 在服务器上进行更新和安装后,我希望执行干净的重新启动,但有时我发现重新启动本身被卡住了

这就是我所拥有的

if uptime_seconds < 1000: 
    uptime_string = str(datetime.timedelta(seconds=uptime_seconds)) #Convert time into sec
    do_log("Last reboot attempt was %s ago" % uptime_string)
 else:
    do_log("Attempting to reboot the system")
    process=subprocess.Popen(['timeout' ,'120', 'reboot'], stdout=subprocess.PIPE) #timeout the reboot if in 120 seconds
如果正常运行时间<1000秒:
正常运行时间字符串=str(datetime.timedelta(seconds=uptime_seconds))#将时间转换为秒
执行日志(“上次重新启动尝试是在%s之前”%uptime\u字符串)
其他:
do_日志(“尝试重新启动系统”)
process=subprocess.Popen(['timeout','120','reboot'],stdout=subprocess.PIPE)#如果在120秒内重启,则超时
这就是我想要的:

与上面的代码一起,如果干净的重新启动需要120秒以上,那么应该触发sysrq进行硬重新启动 若上述条件不满足,则应执行以下脚本

if uptime_seconds < 1000: 
      uptime_string = str(datetime.timedelta(seconds=uptime_seconds)) #Convert time into sec
      do_log("Last reboot attempt was %s ago" % uptime_string)
elif:
      do_log("Attempting to reboot the system")
      process=subprocess.Popen(['timeout' ,'120', 'reboot'], stdout=subprocess.PIPE) #timeout the reboot if in 120 seconds
else:
      os.system('echo 1 > /proc/sys/kernel/sysrq && echo b > /proc/sysrq-trigger') # send sysrq for hard reboot.
如果正常运行时间<1000秒:
正常运行时间字符串=str(datetime.timedelta(seconds=uptime_seconds))#将时间转换为秒
执行日志(“上次重新启动尝试是在%s之前”%uptime\u字符串)
埃利夫:
do_日志(“尝试重新启动系统”)
process=subprocess.Popen(['timeout','120','reboot'],stdout=subprocess.PIPE)#如果在120秒内重启,则超时
其他:
系统('echo 1>/proc/sys/kernel/sysrq&&echo b>/proc/sysrq trigger')#发送sysrq进行硬重启。

此外,我无法存储进程变量(来自上述脚本)的任何输出,也无法获取任何returncode值,因为它会立即触发reboot命令。我是否可以对重启超时设置一些条件?即使是这个场景也很难测试,因为我无法达到第二个条件,无法抵抗重新启动。

我尝试了以下方法: 如果120秒内没有完全重新启动,请执行硬重新启动

reboot_chk = subprocess.Popen(['timeout' ,'120', 'reboot'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
            output, error = reboot_chk.communicate()
            print(output)
            if reboot_chk.returncode != 0:
                print("Attempting to hard reboot the system")
                os.system('echo 1 > /proc/sys/kernel/sysrq && echo b > /proc/sysrq-trigger') # send sysrq for hard reboot.

Linux不是Windows,在安装后很少需要重新启动。@klauds.Mine在我的情况下,它确实需要作为客户端软件进行自己的软件维护和应用程序升级。一旦发出重新启动命令,所有进程都停止,然后机器重新启动。您将无法再控制您的程序。所以不,这是不可能的。你说的重启卡住是什么意思?@leoOrionAfter重启执行系统后,内部人员不得不硬重启它。在这种卡住的情况下,你能检查syslog(
/var/log/syslog
)吗?这不是一种自然情况,因此查看日志将非常有用。