Skip to content
View in the app

A better way to browse. Learn more.

Unraid

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Featured Replies

如题,我现在使用的是UserScripts,触发条件只有定时和阵列启停

Solved by suosuosi

  • Author

额,我想问的是,以 一个docker或者虚拟机启动或者结束 作为触发条件,执行脚本

20 minutes ago, llm said:

额,我想问的是,以 一个docker或者虚拟机启动或者结束 作为触发条件,执行脚本

 

如果是虚拟机,可以借助 libvirt hook:

 

docker 的我不太清除,有知道的朋友可以分享一下。

Edited by JackieWu

  • 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

  • Author

在两位大佬的指导下,本小白成功实现了一定的unraid自动化,下面分享出来给大家参考

  • Author

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

 

效果:

虚拟机启动后独立显卡自动进入工作模式,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
有错字

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是上一步创建的脚本名,改成你自己的

谢谢分享

  • Author

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次。

 

 

 

  • Author

另外,我发现v2rayA会自动代理应用市场以外的流量,比如plex刮削anidb数据的时候,不需要进行配置

docker有没有更优雅的方式哦

  • 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" ]]是什么意思,判断什么?

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" ]]这个是判断什么?谢谢

  • Author
13 minutes ago, shadowtyw said:

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

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

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

  • Author

1.thumb.PNG.f27ef62190e82d3e9e5efe8506d4ef94.PNG

 

2.thumb.PNG.09a097cde10fe77a44b1d62b03348d6c.PNG

 

3.PNG.480cfa5f36b54a7d083c54348a279d34.PNG

 

 

4.thumb.PNG.568ceaf1c1f56e9ad6832db0a0139892.PNG

 

5.thumb.PNG.4c3a4ceccd30adacf92bc46d2a2779a8.PNG

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 这个命令。(我就是这样)

 

再次感谢

感谢分享,Mark一下,慢慢研究😀

  • 6 months later...

6.12.8下是不是不能这么用 虚拟机关机后没有调那个脚本呢 日志里看不到信息

  • 2 weeks later...
  • Author
On 6/8/2024 at 9:40 PM, final said:

6.12.8下是不是不能这么用 虚拟机关机后没有调那个脚本呢 日志里看不到信息

我现在是6.12.10,还是正常的

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...

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.