如何识别是否有人在监视我的 bash 脚本中的 plex 媒体

如何识别是否有人在监视我的 bash 脚本中的 plex 媒体

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

我的 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

解释:它首先检查脚本的路径和运行脚本的路径(变量 ogpath 和 path)。某些命令需要这些变量。

然后我们有 var oldlink。除非发现新链接,否则该链接是最新链接。除非有新版本,否则此链接不会改变。

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

if-then-else 部分:如果 oldlink 和 newlink 相同(即没有新版本),它会休眠 12 小时,然后再次运行。如果它们不匹配(即有新版本),它会下载 newlink、停止 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 分钟。当输出为空时,它会继续。

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

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

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

希望您能帮忙。谢谢!

答案1

一些建议和指示太多,无法评论:

  • 作为@cmak.fr指出,您应该使用 acronsleep不是:

    跑步:

    $ crontab -e
    

    并添加如下一行:

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

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

  • 直接使用curlwget -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 的“正在播放”信息。”

相关内容