web-dev-qa-db-ja.com

複数のトレントの送信シャットダウンスクリプト?

送信用のシャットダウンスクリプトを作成しました。トレントのダウンロードが終了すると、送信はスクリプトを呼び出します。スクリプトは私のマシン(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

問題は、複数のファイルをダウンロードしているときに、最初のファイルが終了すると、送信がスクリプトを実行することです。それをしたいのですが、すべてのダウンロードが完了した後。

別のトレントをまだダウンロードしている場合は、2番目のチェック(モニターチェックの直後)を配置したい

これを行う方法はありますか?

4
Khurshid Alam

この情報は環境変数を介してスクリプトに渡されないため、TransmissionのRPCインターフェイスを照会する必要があります。これは、クライアントライブラリによって行われることもあります。たとえば、Pythonスクリプトでは python transmissionrpc を使用できます。 http://www.transmissionbt.com/resources/ にリストされているこのような他のインターフェースがあります。

これは、送信リモートを使用して非アイドルダウンロードの数をカウントする簡単な方法です。

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%」ストリップの完了したトレント。 「停止」は、不完全だが一時停止したトレントを取り除きます。このアプローチは絶対確実ではありません。たとえば、「100%Stopped」という名前のトレントはそれを破ります。

5
user98677

私は、送信のRPCインターフェイスを利用するより良いスクリプトを作成しました(user98677アドバイスより)。

コード:

Github Gist: https://Gist.github.com/khurshid-alam/6474227

それは何ですか?

  1. 完了後、完了したトレントを一時停止または削除します。

  2. プッシュオーバー通知を送信する(カール付き)[オプション]

  3. Twitter通知を送信します(twidgeが必要です)[オプション]

  4. コンピューターのサスペンド/シャットダウンORはそのままにします。

Pushover Notification From Transmission

スクリーンショット


セットアップ

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

Ubuntu以外のディストリビューションでのsuspendアクション(UbuntuはUpowerを使用)の場合、powermanagement-interfaceパッケージをインストールします

Sudo apt-get install powermanagement-interface

インストール後:

  1. github-Gist からコードを取得し、ハードドライブの任意の場所にtrsmとしてファイルを保存します。ファイルを実行可能にしますchmod a+x trsm

  2. ログインしてプッシュオーバーし、ユーザーキーをコピーします。スクリプトのuser-keyの下に貼り付けます。

  3. 見栄えの良いアプリケーション(送信)アイコンで通知を送信する場合は、プッシュオーバーで送信アイコン付きの偽アプリを作成し、アプリケーションキー(API /トークンキー)をコピーして、スクリプトのapp-keyの下に貼り付けます。

  4. Twitterのセットアップについては、twidgeのドキュメントを参照してください。

  5. オープン伝送。設定-> 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
4
Khurshid Alam

簡単なスクリプト。

Khurshid Alamとuser98677に感謝します。私はこのスクリプトを書きました。ディスプレイがオンの場合(作業中)、コンピューターがシャットダウンされていない場合、送信を終了して通知を送信します。

  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
    
1
Vijay