想用 Python 重启你的 Ubuntu 服务器? 好家伙,这想法有点意思,省时省力啊! 别跟我说你还傻乎乎地手动输命令呢! 让我来给你支几招,保证让你对 Python 操作 Ubuntu 重启这事儿,门儿清!
先说最简单的,也是我最常用的,那就是直接上os
模块。 虽然土了点,但架不住它好使啊!
“`python
import os
os.system(“sudo reboot”)
“`
就这么几行代码,搞定! 别忘了,sudo
需要权限哦。 要么你的脚本以 root 身份运行,要么就得在终端里输入密码。 我个人喜欢前者,直接给脚本加上执行权限,再用 root 跑,省事!
不过,直接用os.system
总感觉有点 Low。 毕竟我们是 Python 程序员,要优雅! 要用更 Pythonic 的方式!
来,试试 subprocess
模块。 这玩意儿能更精细地控制进程,还能获取命令的输出,简直不要太赞!
“`python
import subprocess
try:
subprocess.run([“sudo”, “reboot”], check=True)
print(“Ubuntu 系统正在重启…”)
except subprocess.CalledProcessError as e:
print(f”重启失败:{e}”)
except FileNotFoundError:
print(“找不到 ‘sudo’ 命令,请确认已安装。”)
“`
看看,是不是感觉瞬间高大上了? subprocess.run
接收一个列表,列表里放的就是你要执行的命令和参数。 check=True
的意思是,如果命令执行失败,就抛出一个异常。 这样我们就能捕获错误,进行处理。
再说说这个 FileNotFoundError
, 这个很重要! 因为有时候你的服务器上可能没有 sudo
命令 (虽然这概率很小), 但是防患于未然总是好的。
但是! 注意了啊, subprocess
这玩意儿有个坑,那就是权限问题。 如果你运行脚本的用户没有 sudo
权限,那还是会失败。 所以,要么给用户授权,要么就像我前面说的,用 root 身份运行脚本。
哎,等等, 我突然想到,有些时候, 你可能不想直接重启, 而是想先执行一些清理工作, 比如关闭一些服务,或者保存一些数据。 这也好办,在重启之前,加几行代码就行了。
“`python
import os
import subprocess
import time
def safe_reboot():
# 1. 关闭服务
print(“正在关闭服务…”)
try:
subprocess.run([“sudo”, “systemctl”, “stop”, “your_service”], check=True) #把your_service替换成你的服务名
print(“服务已关闭。”)
except subprocess.CalledProcessError as e:
print(f”关闭服务失败:{e}”)
# 2. 保存数据
print("正在保存数据...")
try:
# 这里写你的数据保存逻辑,比如写入文件、发送到数据库等等
# 假设你要把一个变量保存到文件里
with open("backup.txt", "w") as f:
f.write("这是你要保存的数据")
print("数据已保存。")
except Exception as e:
print(f"保存数据失败:{e}")
# 3. 延迟一段时间,确保操作完成
print("等待5秒...")
time.sleep(5)
# 4. 重启系统
print("准备重启系统...")
try:
subprocess.run(["sudo", "reboot"], check=True)
print("Ubuntu 系统正在重启...")
except subprocess.CalledProcessError as e:
print(f"重启失败:{e}")
safe_reboot()
“`
看到了吧? 先关闭服务,再保存数据,最后才重启。 这样就能保证数据的安全,避免意外丢失。 其中,your_service
要替换成你实际的服务名。 我这里用 systemctl
命令来管理服务,如果你用的是其他的命令,也要相应地修改。
而且,我还在重启之前加了一个 time.sleep(5)
。 这是为了让前面的操作有足够的时间完成。 毕竟,服务器的运行速度千差万别,有些操作可能需要更长的时间。 你可以根据实际情况调整这个时间。
再来点更高级的? 如果你的服务器是远程的,你可能想通过 SSH 连接到服务器,然后执行重启命令。 这也好办,用 paramiko
模块就行了。
“`python
import paramiko
def remote_reboot(hostname, username, password):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 自动添加主机密钥,不安全,生产环境慎用!
try:
ssh.connect(hostname, username=username, password=password)
command = "sudo reboot"
stdin, stdout, stderr = ssh.exec_command(command)
# 获取命令执行结果,如果需要的话
output = stdout.read().decode()
error = stderr.read().decode()
print("重启命令已发送。")
if output:
print("输出:", output)
if error:
print("错误:", error)
except Exception as e:
print(f"远程重启失败:{e}")
finally:
ssh.close()
使用示例
remote_reboot(“your_server_ip”, “your_username”, “your_password”) # 将占位符替换为你的服务器信息
“`
这个代码通过 SSH 连接到远程服务器,然后执行 sudo reboot
命令。 注意,ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
这一行代码不安全,在生产环境慎用! 它会自动添加主机密钥,可能会导致中间人攻击。 更安全的做法是手动添加主机密钥。
还有一点,就是 paramiko
模块需要安装。 如果你还没有安装,可以用 pip install paramiko
命令来安装。
最后,再强调一下权限问题。 不管是本地重启还是远程重启,都要确保运行脚本的用户有 sudo
权限。 否则,重启命令会失败。 最简单的办法就是用 root 身份运行脚本。
总而言之,用 Python 重启 Ubuntu 服务器的方法有很多种,你可以根据自己的实际情况选择最适合自己的方法。 记住,安全第一,权限第二,优雅第三!
评论(0)