AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1301853
Accepted
Cas
Cas
Asked: 2020-12-22 07:39:24 +0800 CST2020-12-22 07:39:24 +0800 CST 2020-12-22 07:39:24 +0800 CST

如何识别是否有人正在为我的 bash 脚本观看 plex 媒体

  • 772

嘿,我有一个(至少对我来说)相当困难的问题。

我的 Ubuntu 服务器上安装了 plex 媒体服务器。我正在编写一个脚本,它将每 12 小时自动检查 plex 服务器是否有更新,如果有,它将自动下载。它是用 bash 编写的,因为这是我知道的唯一语言。

#! /bin/bash

ogpath=$(pwd)
path=$(locate -br '^12hpmscheck.sh$' | xargs dirname)

cd "$path"
#step 1
oldlink="https://downloads.plex.tv/plex-media-server-new/1.21.1.3830-6c22540d5/debian/plexmediaserver_1.21.1.3830-6c22540d5_amd64.deb"
newlink=$(sudo wget https://plex.tv/pms/downloads/5.json && sudo chmod 777 "$path/5.json" && sudo chmod a+rwx "$path/5.json" && grep -o 'Ubuntu (16.04+) / Debian (8+) - Intel/AMD 64-bit","build":"linux-x86_64","distro":"debian","url":"https://downloads.plex.tv/plex-media-server-new/.*/debian/plexmediaserver_.*_amd64.deb","checksum":".*"},{"label":"Ubuntu (16.04+) / Debian (8+) - ARMv8' "$path/5.json" | grep -o 'https://.*.deb')

if [[ "$oldlink" == "$newlink" ]]
then
        echo "no new version"
        rm "$path/5.json"
        cd "$ogpath"
        sleep 12h
        $path/12hpmscheck.sh
else
        echo "new version"

        #step 3
        wget "$newlink"
        echo "downloaded new version"
        sed -i "s|$oldlink|$newlink|" "$path/12hpmscheck.sh"
        echo "updated old link"

        #step 4
        sudo systemctl stop plexmediaserver.service
        echo "stopped plexmediaserver.service"

        #step 5
        sudo dpkg -i plexmediaserver*.deb
        echo  "installed new version"

        #step 6
        sudo systemctl start plexmediaserver.service
        echo "started plexmediaserver.service"

        #step 7
        rm 5.json
        rm plexmediaserver*.deb
        cd "$ogpath"
        sleep 12h
        $path/12hpmscheck.sh
fi

说明:它首先检查脚本的路径以及运行它的路径(vars ogpath 和路径)。某些命令需要这些变量。

然后我们有 var oldlink。除非找到新链接,否则该链接是最新链接。除非有新版本,否则这个不会改变。

然后我们有 var newlink。此变量将每 12 小时更新一次。长话短说,它下载了用于下载服务器的 plex 网站,并找到了 Ubuntu 64 位的链接。如果有更新,除了版本号之外,结果看起来与 oldlink 相同。

if-then-else 部分:如果 oldlink 和 newlink 相同(也就是没有新版本),它会休眠 12 小时,然后再次运行。如果它们不匹配(也就是有新版本),它会下载新链接,停止 pms,更新 pms,启动 pms,更新 oldlink 以成为新版本,然后再次休眠 12 小时。

现在您可能已经注意到#step 1,3,4,5,6,7。那些是因为我在制作剧本之前为自己做了一个笔记。我制定了步骤以及在这些步骤中需要发生什么。这让我很清楚我需要做什么。但是没有第 2 步。那是因为第 2 步如下:如果有人现在正在观看 plex(另外两个人可以访问服务器并可以观看内容),请等待 20 分钟并再次运行脚本。如果没有人在看,请继续。

我曾计划通过 wget 连接到 plex-dashboard 的链接(您可以在其中查看是否有人在观看)并 grep 一个仅在有人观看时才存在的字符串来检查这一点。在该页面的代码中,有人观看时可以找到以下字符串(没有人观看时找不到):NowPlaying-nowPlayingList。我会 grep 该字符串,当输出匹配“NowPlaying-nowPlayingList”时,有人正在观看,它会等待 20 分钟。当输出为空时,它会继续。

问题是我无法获取该仪表板页面,因为它有 # 并且人们告诉我这意味着它是一个“动态 Java”页面。我不明白。所以我搜索了其他方法来检查并想出了我可以从本地代码中 grep 那个字符串的想法。Pms 安装在我的服务器上,因此机器上必须有它的代码。如果我找到与该仪表板有关的代码,我可以在那里搜索一个字符串。

问题是:我一般找不到任何与 pms 的纯功能相关的代码,更不用说仪表板的代码了。我在哪里可以找到代码,或者是否有其他我没有想到的检查方法。我更喜欢使用 bash,但如果必须,我可以改用另一种语言。虽然我必须重写完整的脚本。

如果有办法更好/更快地编写代码的其他部分,也欢迎这些建议!

希望您能提供帮助。谢谢!

scripts command-line bash plex
  • 1 1 个回答
  • 928 Views

1 个回答

  • Voted
  1. Best Answer
    pLumo
    2020-12-22T08:45:52+08:002020-12-22T08:45:52+08:00

    一些无法评论的建议和方向:

    • 正如@cmak.fr指出的那样,您应该使用 acron而不是sleep:

      跑:

      $ crontab -e
      

      并添加一行:

      0 */12 * * * /path/to/my/script
      

      然后您的脚本将每 12 小时运行一次。如果没有新版本,请确保退出您的脚本。

    • 直接使用curlorwget -O-和grep输出,而不是使用下载文件。

    • 由于这是json输出,忘记我刚才说的。不要使用grep!使用json解析器(例如jq)

      安装:

      sudo apt install jq
      

      用法:

      newlink=$(curl plex.tv/... | jq '.url')
      

      (类似的东西,我不知道完整的 plexjson输出)

    • 在某些 Javascript 加载的网站上抓取内容是可能的,但并不容易,而且大多没有必要。Javascript 将查询一些 API,您应该直接查询。

    • 打开 plex.tv 站点并检查开发人员工具的“网络”选项卡,以获取除主 html 之外加载的内容。

      -或更好-

    • 您可以查看plex API 手册,而不是尝试和猜测:;-)

      尝试,

      curl http://ip:port/status/sessions
      

      “这将检索 PMS 的“正在播放”信息。”

    • 2

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve