嘿,我有一个(至少对我来说)相当困难的问题。
我的 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,但如果必须,我可以改用另一种语言。虽然我必须重写完整的脚本。
如果有办法更好/更快地编写代码的其他部分,也欢迎这些建议!
希望您能提供帮助。谢谢!