Jump to content

有没有办法在开启/关闭某个docker/虚拟机时自动执行脚本


llm
Go to solution Solved by suosuosi,

Recommended Posts

  • Solution
#!/bin/bash

# 设置你要检查容器的名称
container_name="AList"

# 获取容器的状态
container_status=$(docker inspect -f '{{.State.Status}}' "$container_name" 2>/dev/null)

# 检查容器状态并输出结果
if [ -z "$container_status" ]; then
  echo "容器 '$container_name' 不存在或无法访问。"
  exit 1
fi

if [ "$container_status" == "running" ]; then
  echo "容器 '$container_name' 已经运行。"
# 容器运行中,需要执行的代码
else
  echo "容器 '$container_name' 已关闭。"
# 容器停运,需要执行的代码
fi

这是判断的脚本,判断后执行什么,就需要自己加了

Edited by suosuosi
  • Like 1
Link to comment

游戏虚拟机关闭后自动降低显卡功耗

 

效果:

虚拟机启动后独立显卡自动进入工作模式,unraid无法查看显卡功耗

虚拟机关机后unraid接管独立显卡,显卡进入低功耗模式

功耗对比:索泰RTX4080天启OC,unraid接管状态下功耗由45W降至16W,风扇由低速转动变为停转

 

其他参考文章:

[Unraid] 不直通独显将N卡直接传递给虚拟机使用并设置虚拟机关机时降低显卡功耗_NAS存储_什么值得买 (smzdm.com)

UnRaid硬件直通的n种正确姿势_unraid 显卡直通-CSDN博客

Spoiler

打开unraid终端,进入/dev/disk/by-id/,查看硬盘名称用于直通硬盘

总结:

  1. unraid不屏蔽显卡
  2. 安装插件 Nvidia Driver 和 Gpu Statistics
  3. 主界面→flash→在unraid os中 append 和 initrd=/bzroot 之间添加 video=efifb:off(记得加空格)image.png.63185cbda37c07f6b344345461dd477f.png
  4. 在Windows物理机上使用GPU-Z提取显卡BIOS的rom文件。如果没有其他机器,可以在unraid里的硬盘里选一块固态(后称为硬盘A),先数据迁移到其他盘,然后取消分配,开启Unassigned Devices插件的破坏性模式,将硬盘A格式化,然后创建一个虚拟机,将硬盘A直通给虚拟机,在上面安装windows,然后重启机器,启动项选择硬盘A,就进入windows物理机了。
  5. 安装HxD或者使用VSCode安装Hex Editor扩展修改rom文件,搜索“VGA”,定位第一个,然后删除55 AA之前的全部内容,如图删除00009400那一行之前的全部内容(00009400那一行不删除)image.png.bd3e4894ab4f5d21435c25960fe737eb.png
  6. 按照一般直通显卡的方式操作
  7. User Scripts创建脚本,内容如下
    #!/bin/bash
    nvidia-smi --persistence-mode=1
  8. 打开unraid终端,在/etc/libvirt/hooks/目录下创建文件夹qemu.d,在qemu.d内创建脚本文件(随便命名,不需要后缀名),脚本内容如下
    #!/bin/bash
    
    if [[ $2 == "release" ]]
    then
            bash /boot/config/plugins/user.scripts/scripts/gpu.lowpower/script
    fi

    其中gpu.lowpower是上一步创建的脚本名,改成你自己的

 

额,写出来才发现,好像可以直接在qemu.d里那个脚本里把bash /boot/config/plugins/user.scripts/scripts/gpu.lowpower/script改成nvidia-smi --persistence-mode=1

Edited by llm
有错字
  • Like 2
  • Thanks 1
Link to comment
17 minutes ago, llm said:

游戏虚拟机关闭后自动降低显卡功耗

 

效果:

虚拟机启动后独立显卡自动进入工作模式,unraid无法查看显卡功耗

虚拟机关机后unraid接管独立显卡,显卡进入低功耗模式

功耗对比:索泰RTX4080天启OC,unraid接管状态下功耗由45W降至16W,风扇由低俗转动变为停转

 

其他参考文章:

[Unraid] 不直通独显将N卡直接传递给虚拟机使用并设置虚拟机关机时降低显卡功耗_NAS存储_什么值得买 (smzdm.com)

UnRaid硬件直通的n种正确姿势_unraid 显卡直通-CSDN博客

  Reveal hidden contents

打开unraid终端,进入/dev/disk/by-id/,查看硬盘名称用于直通硬盘

总结:

  1. unraid不屏蔽显卡
  2. 安装插件 Nvidia Driver 和 Gpu Statistics
  3. 主界面→flash→在unraid os中 append 和 initrd=/bzroot 之间添加 video=efifb:off(记得加空格)image.png.63185cbda37c07f6b344345461dd477f.png
  4. 在Windows物理机上使用GPU-Z提取显卡BIOS的rom文件。如果没有其他机器,可以在unraid里的硬盘里选一块固态(后称为硬盘A),先数据迁移到其他盘,然后取消分配,开启Unassigned Devices插件的破坏性模式,将硬盘A格式化,然后创建一个虚拟机,将硬盘A直通给虚拟机,在上面安装windows,然后重启机器,启动项选择硬盘A,就进入windows物理机了。
  5. 安装HxD或者使用VSCode安装Hex Editor扩展修改rom文件,搜索“VGA”,定位第一个,然后删除55 AA之前的全部内容,如图删除00009400那一行之前的全部内容(00009400那一行不删除)image.png.bd3e4894ab4f5d21435c25960fe737eb.png
  6. 按照一般直通显卡的方式操作
  7. User Scripts创建脚本,内容如下
    #!/bin/bash
    nvidia-smi --persistence-mode=1
  8. 打开unraid终端,在/etc/libvirt/hooks/目录下创建文件夹qemu.d,在qemu.d内创建脚本文件(随便命名,不需要后缀名),脚本内容如下
    #!/bin/bash
    
    if [[ $2 == "release" ]]
    then
            bash /boot/config/plugins/user.scripts/scripts/gpu.lowpower/script
    fi

    其中gpu.lowpower是上一步创建的脚本名,改成你自己的

谢谢分享

Link to comment

v2rayA代理应用市场自动化

 

由于搞clash和SSR总是不成功,我还是用的自己习惯的v2ray,但是有时候应用市场是能直连的,我不想一直开着代理。

但是v2rayA代理应用市场要改配置文件,在 /boot/config/plugins/community.applications/ 目录下创建文件proxy.cfg,所需命令如下

echo -n "" > /boot/config/plugins/community.applications/proxy.cfg
echo "port=20171" >> /boot/config/plugins/community.applications/proxy.cfg
echo "tunnel=1" >> /boot/config/plugins/community.applications/proxy.cfg
echo "proxy=http://127.0.0.1" >> /boot/config/plugins/community.applications/proxy.cfg

但是改了配置文件就不能直连了,之前我是用两个脚本分别手动创建/删除这个文件

 

自动化效果:

每10秒检查一次v2rayA这个docker的状态以及代理配置文件是否存在且不为空,据此进行相应操作

 

方法如下:

  1. 新建脚本ca.proxy.v2raya
    #!/bin/bash
    
    # 删除日志文件
    rm /tmp/user.scripts/tmpScripts/ca.proxy.v2raya/log.txt
    # 设置你要检查容器的名称,改成自己的
    container_name="v2rayA"
    
    # 获取容器的状态
    container_status=$(docker inspect -f '{{.State.Status}}' "$container_name" 2>/dev/null)
    # 获取代理状态(文件存在且不为空)
    proxy_status=0
    if [ -e /boot/config/plugins/community.applications/proxy.cfg ]; then
        if [ -s /boot/config/plugins/community.applications/proxy.cfg ]; then
            proxy_status=1
        fi
    fi
    
    # 检查容器状态
    if [ -z "$container_status" ]; then
      # 容器 '$container_name' 不存在或无法访问。
      exit 1
    fi
    
    if [ "$container_status" == "running" ]; then
      # 容器 '$container_name' 已经运行。
        if [ $proxy_status == 1 ]; then
            exit 0
        fi
        echo -n "" > /boot/config/plugins/community.applications/proxy.cfg
        echo "port=20171" >> /boot/config/plugins/community.applications/proxy.cfg
        echo "tunnel=1" >> /boot/config/plugins/community.applications/proxy.cfg
        echo "proxy=http://127.0.0.1" >> /boot/config/plugins/community.applications/proxy.cfg
    else
      # 容器 '$container_name' 已关闭。
        if [ $proxy_status == 0 ]; then
            exit 0
        fi
        rm /boot/config/plugins/community.applications/proxy.cfg 2>/dev/nul
    fi
  2. 新建用于定时执行ca.proxy.v2raya的脚本auto.v2raya_proxy.ca
    #!/bin/bash
    
    # 删除日志文件
    rm /tmp/user.scripts/tmpScripts/auto.v2raya_proxy.ca/log.txt
    
    bash /boot/config/plugins/user.scripts/scripts/ca.proxy.v2raya/script
    sleep 10s
    bash /boot/config/plugins/user.scripts/scripts/ca.proxy.v2raya/script
    sleep 10s
    bash /boot/config/plugins/user.scripts/scripts/ca.proxy.v2raya/script
    sleep 10s
    bash /boot/config/plugins/user.scripts/scripts/ca.proxy.v2raya/script
    sleep 10s
    bash /boot/config/plugins/user.scripts/scripts/ca.proxy.v2raya/script
    sleep 10s
    bash /boot/config/plugins/user.scripts/scripts/ca.proxy.v2raya/script
  3. 将auto.v2raya_proxy.ca的定时执行设为Custom,然后设为* * * * *,意思是每分钟执行一次auto.v2raya_proxy.ca。而auto.v2raya_proxy.ca的内容为每10秒执行一次ca.proxy.v2raya,共6次。

 

 

 

Link to comment
  • 2 months later...
On 9/12/2023 at 5:01 PM, llm said:

游戏虚拟机关闭后自动降低显卡功耗

 

效果:

虚拟机启动后独立显卡自动进入工作模式,unraid无法查看显卡功耗

虚拟机关机后unraid接管独立显卡,显卡进入低功耗模式

功耗对比:索泰RTX4080天启OC,unraid接管状态下功耗由45W降至16W,风扇由低速转动变为停转

 

其他参考文章:

[Unraid] 不直通独显将N卡直接传递给虚拟机使用并设置虚拟机关机时降低显卡功耗_NAS存储_什么值得买 (smzdm.com)

UnRaid硬件直通的n种正确姿势_unraid 显卡直通-CSDN博客

  Hide contents

打开unraid终端,进入/dev/disk/by-id/,查看硬盘名称用于直通硬盘

总结:

  1. unraid不屏蔽显卡
  2. 安装插件 Nvidia Driver 和 Gpu Statistics
  3. 主界面→flash→在unraid os中 append 和 initrd=/bzroot 之间添加 video=efifb:off(记得加空格)image.png.63185cbda37c07f6b344345461dd477f.png
  4. 在Windows物理机上使用GPU-Z提取显卡BIOS的rom文件。如果没有其他机器,可以在unraid里的硬盘里选一块固态(后称为硬盘A),先数据迁移到其他盘,然后取消分配,开启Unassigned Devices插件的破坏性模式,将硬盘A格式化,然后创建一个虚拟机,将硬盘A直通给虚拟机,在上面安装windows,然后重启机器,启动项选择硬盘A,就进入windows物理机了。
  5. 安装HxD或者使用VSCode安装Hex Editor扩展修改rom文件,搜索“VGA”,定位第一个,然后删除55 AA之前的全部内容,如图删除00009400那一行之前的全部内容(00009400那一行不删除)image.png.bd3e4894ab4f5d21435c25960fe737eb.png
  6. 按照一般直通显卡的方式操作
  7. User Scripts创建脚本,内容如下
    #!/bin/bash
    nvidia-smi --persistence-mode=1
  8. 打开unraid终端,在/etc/libvirt/hooks/目录下创建文件夹qemu.d,在qemu.d内创建脚本文件(随便命名,不需要后缀名),脚本内容如下
    On 9/12/2023 at 5:01 PM, llm said:

    游戏虚拟机关闭后自动降低显卡功耗

     

    效果:

    虚拟机启动后独立显卡自动进入工作模式,unraid无法查看显卡功耗

    虚拟机关机后unraid接管独立显卡,显卡进入低功耗模式

    功耗对比:索泰RTX4080天启OC,unraid接管状态下功耗由45W降至16W,风扇由低速转动变为停转

     

    其他参考文章:

    [Unraid] 不直通独显将N卡直接传递给虚拟机使用并设置虚拟机关机时降低显卡功耗_NAS存储_什么值得买 (smzdm.com)

    UnRaid硬件直通的n种正确姿势_unraid 显卡直通-CSDN博客

      Hide contents

    打开unraid终端,进入/dev/disk/by-id/,查看硬盘名称用于直通硬盘

    总结:

    1. unraid不屏蔽显卡
    2. 安装插件 Nvidia Driver 和 Gpu Statistics
    3. 主界面→flash→在unraid os中 append 和 initrd=/bzroot 之间添加 video=efifb:off(记得加空格)image.png.63185cbda37c07f6b344345461dd477f.png
    4. 在Windows物理机上使用GPU-Z提取显卡BIOS的rom文件。如果没有其他机器,可以在unraid里的硬盘里选一块固态(后称为硬盘A),先数据迁移到其他盘,然后取消分配,开启Unassigned Devices插件的破坏性模式,将硬盘A格式化,然后创建一个虚拟机,将硬盘A直通给虚拟机,在上面安装windows,然后重启机器,启动项选择硬盘A,就进入windows物理机了。
    5. 安装HxD或者使用VSCode安装Hex Editor扩展修改rom文件,搜索“VGA”,定位第一个,然后删除55 AA之前的全部内容,如图删除00009400那一行之前的全部内容(00009400那一行不删除)image.png.bd3e4894ab4f5d21435c25960fe737eb.png
    6. 按照一般直通显卡的方式操作
    7. User Scripts创建脚本,内容如下
      #!/bin/bash
      nvidia-smi --persistence-mode=1
    8. 打开unraid终端,在/etc/libvirt/hooks/目录下创建文件夹qemu.d,在qemu.d内创建脚本文件(随便命名,不需要后缀名),脚本内容如下
      #!/bin/bash
      
      if [[ $2 == "release" ]]
      then
              bash /boot/config/plugins/user.scripts/scripts/gpu.lowpower/script
      fi

      其中gpu.lowpower是上一步创建的脚本名,改成你自己的

     

    额,写出来才发现,好像可以直接在qemu.d里那个脚本里把bash /boot/config/plugins/user.scripts/scripts/gpu.lowpower/script改成nvidia-smi --persistence-mode=1

    其中gpu.lowpower是上一步创建的脚本名,改成你自己的

 

额,写出来才发现,好像可以直接在qemu.d里那个脚本里把bash /boot/config/plugins/user.scripts/scripts/gpu.lowpower/script改成nvidia-smi --persistence-mode=1

先谢谢兄弟分享,麻烦问下,只要设置第八个步骤的那个脚本就行了吗?那脚本里面的if [[ $2 == "release" ]]是什么意思,判断什么?

Link to comment
On 9/12/2023 at 5:01 PM, llm said:

游戏虚拟机关闭后自动降低显卡功耗

 

效果:

虚拟机启动后独立显卡自动进入工作模式,unraid无法查看显卡功耗

虚拟机关机后unraid接管独立显卡,显卡进入低功耗模式

功耗对比:索泰RTX4080天启OC,unraid接管状态下功耗由45W降至16W,风扇由低速转动变为停转

 

其他参考文章:

[Unraid] 不直通独显将N卡直接传递给虚拟机使用并设置虚拟机关机时降低显卡功耗_NAS存储_什么值得买 (smzdm.com)

UnRaid硬件直通的n种正确姿势_unraid 显卡直通-CSDN博客

  Reveal hidden contents

打开unraid终端,进入/dev/disk/by-id/,查看硬盘名称用于直通硬盘

总结:

  1. unraid不屏蔽显卡
  2. 安装插件 Nvidia Driver 和 Gpu Statistics
  3. 主界面→flash→在unraid os中 append 和 initrd=/bzroot 之间添加 video=efifb:off(记得加空格)image.png.63185cbda37c07f6b344345461dd477f.png
  4. 在Windows物理机上使用GPU-Z提取显卡BIOS的rom文件。如果没有其他机器,可以在unraid里的硬盘里选一块固态(后称为硬盘A),先数据迁移到其他盘,然后取消分配,开启Unassigned Devices插件的破坏性模式,将硬盘A格式化,然后创建一个虚拟机,将硬盘A直通给虚拟机,在上面安装windows,然后重启机器,启动项选择硬盘A,就进入windows物理机了。
  5. 安装HxD或者使用VSCode安装Hex Editor扩展修改rom文件,搜索“VGA”,定位第一个,然后删除55 AA之前的全部内容,如图删除00009400那一行之前的全部内容(00009400那一行不删除)image.png.bd3e4894ab4f5d21435c25960fe737eb.png
  6. 按照一般直通显卡的方式操作
  7. User Scripts创建脚本,内容如下
    #!/bin/bash
    nvidia-smi --persistence-mode=1
  8. 打开unraid终端,在/etc/libvirt/hooks/目录下创建文件夹qemu.d,在qemu.d内创建脚本文件(随便命名,不需要后缀名),脚本内容如下
    #!/bin/bash
    
    if [[ $2 == "release" ]]
    then
            bash /boot/config/plugins/user.scripts/scripts/gpu.lowpower/script
    fi

    其中gpu.lowpower是上一步创建的脚本名,改成你自己的

 

额,写出来才发现,好像可以直接在qemu.d里那个脚本里把bash /boot/config/plugins/user.scripts/scripts/gpu.lowpower/script改成nvidia-smi --persistence-mode=1

谢谢兄弟分享,步骤7之前的我都会,就想问一句,下面两个脚本只需要用8步骤就行了吗(把bash换成nvidia那个),请问下if [[ $2 == "release" ]]这个是判断什么?谢谢

Link to comment
13 minutes ago, shadowtyw said:

谢谢兄弟分享,步骤7之前的我都会,就想问一句,下面两个脚本只需要用8步骤就行了吗(把bash换成nvidia那个),请问下if [[ $2 == "release" ]]这个是判断什么?谢谢

后来发现还是需要步骤7的,因为开机时也需要运行一次这个脚本

if [[ $2 == "release" ]] 的意思是 “当虚拟机成功关机、显卡控制权交回unraid主系统”

Link to comment
40 minutes ago, llm said:

1.thumb.PNG.f27ef62190e82d3e9e5efe8506d4ef94.PNG

 

2.thumb.PNG.09a097cde10fe77a44b1d62b03348d6c.PNG

 

3.PNG.480cfa5f36b54a7d083c54348a279d34.PNG

 

 

4.thumb.PNG.568ceaf1c1f56e9ad6832db0a0139892.PNG

 

5.thumb.PNG.4c3a4ceccd30adacf92bc46d2a2779a8.PNG

感谢兄弟的指导,已经成功了!!!

我在这里提示几点给其他兄弟:

1.步骤8中的脚本切记新建后记得给权限(chmod +x /etc/libvirt/hooks/qemu.d/****);

2.如果nvidia-smi --persistence-mode=1 这个命令不起作用或者提示错误之类的,请尝试nvidia-smi -pm 1 这个命令。(我就是这样)

 

再次感谢

Link to comment
  • 6 months later...
  • 2 weeks later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...