多个种子的传输关闭脚本?

多个种子的传输关闭脚本?

我为 transmission 编写了一个关闭脚本。Torrent 下载完成后,Transmission 会调用该脚本。该脚本在我的计算机上 (Ubuntu 11.04 和 12.04) 运行正常。

#!/bin/bash
sleep 300s

# default display on current host
DISPLAY=:0.0

# find out if monitor is on. Default timeout can be configured from screensaver/Power configuration.

STATUS=`xset -display $DISPLAY -q | grep 'Monitor'`
echo $STATUS

if [ "$STATUS" == "  Monitor is On" ]

###  Then check if  its still downloading a torrent. Couldn't figure out how.(May be) by monitoring network downstream activity? 

then

    notify-send "Downloads Complete" "Exiting  transmisssion now"
    pkill transmission

else
    notify-send "Downloads Complete" "Shutting Down Computer"
    dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown

fi

exit 0

问题是,当我下载多个文件时,第一个文件完成后,Transmission 会执行脚本。我想这样做,但所有下载完成后。

如果它仍在下载另一个种子,我想进行第二次检查(在监视器检查之后)。

有什么办法可以做到这一点?

答案1

此信息不会通过环境变量传递给脚本,因此您需要查询 Transmission 的 RPC 接口。这有时由客户端库完成 - 例如,Python 脚本可以使用发表于 2018-07-27 16:56:27。还有其他类似的接口列在http://www.transmissionbt.com/resources/

这是一个快速方法,它将使用 transmission-remote 来计算非空闲下载的数量:

transmission-remote yourhost:yourport -tall --info | grep "^  State:" | grep "Down" | wc --lines

如果您还想包含空闲下载,您可以尝试以下操作:

transmission-remote yourhost:yourport -l | grep -v -e " 100% " -e "^Sum" -e "^ID" -e " Stopped " | wc --lines

其中“^ID”和“^Sum”删除页眉和页脚;“ 100% ”删除已完成的种子;“ Stopped ”删除未完成但已暂停的种子。这种方法并非万无一失——例如,名为“ 100% Stopped ”的种子会破坏它。

答案2

我创建了一个更好的脚本(来自 user98677 的建议),它利用了传输的 RPC 接口。

代码:

Github要点:https://gist.github.com/khurshid-alam/6474227

它能做什么?

  1. 种子完成后可暂停或删除。

  2. 发送推送通知(使用 curl)[可选]

  3. 发送 Twitter 通知(需要 twidge)[可选]

  4. 暂停/关闭计算机或者保持原样。

传动装置发出的推覆通知

截屏


设置

在 Ubuntu 上

sudo apt-get install libnotify-bin
sudo apt-get install transmission-cli

在 Ubuntu >= 13.04 上(用于 Twitter 通知):

sudo add-apt-repository ppa:moorhen-core/moorhen-apps
sudo apt-get install twidge

对于suspend非 Ubuntu 发行版(Ubuntu 使用 Upower),请安装 powermanagement-interface 包

sudo apt-get install powermanagement-interface

安装后:

  1. 获取代码github-gist并将文件保存为trsm硬盘上的任何位置。使文件可执行chmod a+x trsm

  2. 登录 pushover 并复制您的用户密钥. 将其粘贴到user-key脚本中。

  3. 如果您希望使用美观的应用程序(传输)图标发送通知,只需在 pushover 中创建一个带有传输图标的虚假应用程序,然后复制应用程序密钥(API / 令牌密钥)并将其粘贴到app-key脚本中。

  4. 有关 Twitter 设置,请参阅 twidge 文档。

  5. 打开 transmission。转到 preference->web。启用 web 客户端(默认端口)并启用用户身份验证。选择用户名和密码。将该用户名和密码分别作为&9091放入脚本中。usernamepassword

  6. 点击打开web客户端,检查是否正常运行。

  7. 最后保存脚本并转到下载选项卡(在传输首选项中)并单击call script when torrent is complete。选择相应的脚本。


脚本

#!/bin/bash


user-key=" "  #put your pushover user-key
app-key=" "  #put your pushover application-key
device=" "    #Your device name in pushover

username=" "  # Transmission remote username
password=" "   # Transmission remote password



sleep 100s

# default display on current host
DISPLAY=:0.0

# authorize transmission
trsm="transmission-remote --auth $username:$password"

# find out number of torrent

TORRENTLIST=`$trsm --list | sed -e '1d;$d;s/^ *//' | cut --only-delimited --delimiter=' ' --fields=1`

for TORRENTID in $TORRENTLIST
do
 echo "* * * * * Operations on torrent ID $TORRENTID starting. * * * * *"

 #echo $TORRENTID

 DL_COMPLETED=`$trsm --torrent $TORRENTID --info | grep "Percent Done: 100%"`

 #echo $DL_COMPLETED

# pause completed torrents & get those torrent names.

 if [ "$DL_COMPLETED" != "" ]; then
  $trsm --torrent $TORRENTID --stop
  trname=`$trsm --torrent $TORRENTID --info | grep "Name:" | awk -F: '{print $NF}'`

  # post an update to twitter

  echo "$trname download was completed" | twidge update  # Put "#" if you don't need this.

  # push update for pushover

  curl -s \
    -F "token=$user-key" \
    -F "user=$app-key" \
  # -F "device=$device" \  # uncomment, if you want to send notification to a particular device.
    -F "title=Download Finished" \
    -F "message=$trname download has completed." \
    http://api.pushover.net/1/messages > /dev/null

  # The following codes works assuming One take advantage of gnome-power-manager by setting "black screen after 2/5/10/.. minitues ". 
  # if monitor(Including laptop screen but EXCLUDING external monitor) is on, it will  just force blank the screen, if not, it will shutdown/suspend or leave it as it is.
  # Modify it as per your requirement.

  STATUS=`xset -display $DISPLAY -q | grep 'Monitor'`
  #echo $STATUS

  if [ "$STATUS" == "  Monitor is On" ]
  then
      notify-send "Downloads Complete" "turning off the screen now"
          xset dpms force off

  else
      notify-send "Downloads Complete" "$trname"

        # uncomment to shutdown the computer
        #dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown

        # uncomment to suspend (on ubuntu)
        #dbus-send --system --print-reply --dest="org.freedesktop.UPower" /org/freedesktop/UPower org.freedesktop.UPower.Suspend

        # uncomment to suspend (on Linux) (requires powermanagement-interface package)
        #pmi action suspend

 else
  echo "Torrent #$TORRENTID is not completed. Ignoring."
 fi

done

答案3

一个简单的脚本。

感谢 Khurshid Alam 和 user98677 我编写了这个脚本,它运行良好。如果显示器打开(您正在工作),它会使 Transmission 退出并发送通知,如果没有,计算机将关闭。

  1. 安装

    sudo apt-get install transmission-cli libnotify-bin
    

    在 Ubuntu 16.04 中

    sudo apt install transmission-cli libnotify-bin
    
  2. 传输>首选项>远程>检查允许远程访问,确保 HTTP 端口为 9091,并且仅允许这些 IP 地址为 127.0.0.1(默认)。
  3. 复制粘贴给定的脚本,保存为“shutdown.sh”并使其可执行。
  4. 传输>首选项>下载>选中“下载完成后调用脚本”,浏览到脚本。
  5. 系统设置>电源>屏幕亮度>不活动时关闭屏幕>选择合理的时间。

    #!/bin/bash
    sleep 300s
    DISPLAY=:0.0
    STATUS=$(xset -display $DISPLAY -q | grep 'Monitor')
    STATE=$(transmission-remote 127.0.0.1:9091 -tall --info | grep "^  State:" | grep "Down" | wc --lines)
    if
        [ "$STATUS" == "  Monitor is On" ] && [ "$STATE" == "0" ]
    then
        notify-send "Downloads Complete" "Exiting  transmisssion now"
        pkill transmission
    elif
         [ "$STATE" == "0" ]
    then
        #in Ubuntu 16,04
        shutdown -h now
        #in older versions use the following
        #dbus-send --session --type=method_call --print-reply --dest=org.gnome.SessionManager /org/gnome/SessionManager org.gnome.SessionManager.RequestShutdown
    fi
    exit 0
    

相关内容