当前位置: 首页 > news >正文

邢台网站建设与制作河南网站优化

邢台网站建设与制作,河南网站优化,腾讯大浙网 网站开发,昆明网站建设-中国互联1.可行的Reboot方法 1.1 修改/etc/sudoers 假定当前用户是mimi,增补这一行: mimi ALL(ALL) NOPASSWD: ALL 这是为了免输指令。 sudoers文件尽量在覆盖前把它的权限改回去: 原始权限 mimidebian-vm:~/test_app$ ls -l /tmp/sudoers -r--r-…

1.可行的Reboot方法

1.1 修改/etc/sudoers

假定当前用户是mimi,增补这一行:

mimi ALL=(ALL) NOPASSWD: ALL

这是为了免输指令。

sudoers文件尽量在覆盖前把它的权限改回去:

原始权限

mimi@debian-vm:~/test_app$ ls -l /tmp/sudoers 
-r--r----- 1 root root 755 5月  30 16:04 /tmp/sudoers 

赋权:

sudo chmod 777 /tmp/sudoers

权限还原:

sudo chmod 640 /tmp/sudoers

1.2 将用户加入sudo,root组:

sudo usermod -aG sudo mimi

sudo usermod -aG root mimi

1.3 python执行设备复位

subprocess.run(f'sudo reboot', shell=True)  #'sudo -E reboot'

2.进阶:执行一个外部脚本

此时需要考虑相对路径的问题,脚本里用得到.py所在目录,进而得到.py主目录的方法实现,也就是那个:project_path,

在示例代码中,该.py位于python工程的一个下级目录。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 获取当前脚本文件所在目录的父目录,并构建相对路径
import os
import sys
current_dir = os.path.dirname(os.path.abspath(__file__))
project_path = os.path.join(current_dir, '..')
sys.path.append(project_path)
sys.path.append(current_dir)
import json
import subprocess
import shutil#推荐的执行外部指令的方法
def CMD_DOWNLOAD_APP(client:mqtt, fn, request_params):# 执行系统命令downloadapp_sh = "./ext_ep/on_mqtt_message_download_app.sh"Invoke_Script(downloadapp_sh)def Invoke_Script(script_releated_path):sh_path = os.path.join(project_path, script_releated_path)if(os.path.exists(sh_path)):subprocess.run(f'sudo {sh_path}', shell=True, check=False)return Truereturn Falsedef Get_Invoke_Environment(script_releated_path):subprocess.run(f'sudo  printenv > feng.txt', shell=True)  #'sudo -E reboot'return True

 2.1 示例:一个可用的远程升级.sh

这里包含了如下操作:

  • 脚本相对路径处理
  • json配置读取
  • ftp自动登陆,下载过程免交互的处理
  • tar升级过程。
#!/bin/bash
echo "this modle should download app from fix ftpserver, then tar zxvf, then reboot"# 获取脚本所在的目录
script_dir=$(dirname "$0")# 切换至应用程序所在的目录
cd "$script_dir/.." || exit# JSON文件路径
json_file="cfg/device_private.json"
# 使用jq解析JSON文件
ftp_server=$(jq -r ".ota_ftp.ip" $json_file)
ftp_user=$(jq -r ".ota_ftp.user" $json_file)
ftp_pass=$(jq -r ".ota_ftp.pass" $json_file)
upload_dir=$(jq -r ".ota_ftp.upload_dir" $json_file)
# 本地保存路径
local_incoming_dir=$(jq -r ".ota_ftp.local_incoming_dir" $json_file)
app_root=$(jq -r ".ota_ftp.app_root" $json_file)
mkdir -p $local_incoming_dir
mkdir -p $app_root# 登录FTP服务器
ftp -i -n $ftp_server <<END_SCRIPT
quote USER $ftp_user
quote PASS $ftp_pass
lcd $local_incoming_dir
cd $upload_dir
bin
mget *.tar.gz 
quit
END_SCRIPT
echo "ftp download..."# 获取最新的.tar.gz文件名
latest_file_local=$(ls -t $local_incoming_dir/*.tar.gz | head -n 1)
tar -xzf "$latest_file_local" -C $app_root
echo "extected!"exit 0

注意那个jq,这是一个sh用的json文件读取工具,它支持全路径名:

“.ota_ftp.ip”相当于: json["ota_ftp"]["ip"]

sudo apt-get install jq 

3.未解决的问题

1.我无法把用户加入比如operator的某个支持交互式登陆的组,让这个用户仅仅具备开关机权限。2.应用程序的执行用户可能是mimi,但是subprocess的缺省用户是root...?然后这个确认用户root居然无法直接具备开关机权限。。。

附录A 调试方法

1.可以利用类似的语句刺探调用环境的信息

#subprocess.run(f'sudo -u {exec_user} printenv > reboot_log.txt', shell=True) 

http://www.hkea.cn/news/293732/

相关文章:

  • 菏泽网站建设电话常州seo外包
  • 做木皮的网站裂变营销五种模式十六种方法
  • 精美 企业网站模板微信软文推广怎么做
  • 怎么建立一个网站里面可以查询资料百度权重域名
  • 网站建设顺序镇江交叉口优化
  • 低价企业网站搭建软文新闻发布网站
  • 创造与魔法官方网站做自己喜欢的事seo视频
  • 淘宝联盟推广网站怎么做吉安seo招聘
  • 工程招聘网站如何免费制作自己的网站
  • 网站建设调研问卷搜易网托管模式的特点
  • 在哪个网站可以做java面试题宁德市蕉城区疫情
  • 2021年重大新闻事件seo快速工具
  • 拼多多网店南宁优化推广服务
  • 洛阳建筑公司排名长沙官网seo服务
  • 网站关键词优化公司哪家好企业网站seo点击软件
  • 做网站有必要?优化师培训
  • 网站怎么发布信息百度推广优化技巧
  • 西安软件培训百度百科优化排名
  • 网站上文章加入音乐是怎么做的网页代码
  • 深圳公布最新出行政策徐州seo招聘
  • wordpress的漏洞seo优化知识
  • 网站建设高端seo和sem分别是什么
  • 成交功能网站怎么推广自己的产品
  • 北京宣传片网站seo综合查询
  • 滨海网站建设公司百度指数的使用
  • 湛江网站建设外包seo到底是什么
  • 做收集信息的网站河源市企业网站seo价格
  • 有赞短链接生成汕头seo推广
  • 团队做网站分工搜索引擎案例分析结论
  • 企业网站的建设过程做整站优化