Home

rfriends3  - For all radio lovers -

録音ファイルをsambaサーバに自動でコピーする

rfriends3には、ラジコやらじるの録音完了後、特定のsh(bat)を起動する仕組みがあります。
具体的には1番組の録音終了時に、user_process2.sh(bat)が呼び出され、そこにユーザ独自の処理を記述することができます。
ここでは、debian/ubuntuを例に説明します。

他のディストリやWindowsでも同様のことが可能です。

[!CAUTION]
この件に関しては、基本的にサポートは行っていません。

1) smbclientの確認

$ smbclient --version  
Version 4.13.13-Debian  

存在しない場合はインストールする。

$ sudo apt install smbclient  

2) コピー先ディレクトリを作成する。

ここでは仮に以下とする。

サーバ: 192.168.1.90
共有ディレクトリ: smbdir
コピー先ディレクトリ: dstdir

共有ディレクトリは、/home/rpi/smbdirと仮定する。

$ mkdir /home/rpi/smbdir/dstdir  

3) user_process2.shを編集

user_process2.shに直接処理を書いてもいいが、
いったん、別shを起動するほうがいい。

$ vi /home/rpi/rfriends3/config/user_process2.sh  
#!/bin/sh  
sh /home/rpi/user_process2_ex.sh $1 $2 $3 >> /home/rpi/user_process2_ex.log 2> /home/rpi/user_process2_ex.err   
  
exit  

4) 実際の処理を記述する。

user_process2.shに記述したshを編集する。(ここでは user_process2_ex.sh)
単純に録音ファイルをコピーしている。

$ vi /home/rpi/user_process2_ex.sh  
#!/bin/sh  
#  
# Ver1.3.4までは$1のみ、Ver1.3.5 以降で$2,$3が有効  
# $1 で録音したファイル名が渡ってくる  
# $2 ex_type(radiko,radiru,...)  
# $3 ch(TBS,LFR,...)  
#  
#echo $1 $2 $3  
#  
src=$1  
dst=`basename $1`  
  
server=//192.168.1.90/smbdir  
dstdir=dstdir  
user=user  
pass=pass  
  
#echo "smbclient $server -D $dstdir -U $user%$pass -c \"put $src $dst ; exit\" \n"  
  
smbclient $server -D $dstdir -U $user%$pass -c "put $src $dst ; exit"  
ret=$?  
  
if [ $ret -eq 0 ]; then  
    echo "OK"  
    # rm $src  
else  
    echo "NG"  
fi  
exit  

[!CAUTION] 注)リターンコードが正確でないことがあるので、 成功だから元ファイル削除はちょっと危険です。

AIに質問したら、以下のような答えが返ってきました。

# -c で ls コマンドを実行、出力は標準エラーも含めて変数に
OUTPUT=$(smbclient "$SERVER" -U "$USER"%"$PASS" -c "ls" 2>&1)

if [[ $OUTPUT == *"NT_STATUS_ACCESS_DENIED"* ]]; then
    echo "アクセス拒否"
elif [[ $OUTPUT == *"NT_STATUS_LOGON_FAILURE"* ]]; then
    echo "ログオン失敗"
elif [[ $OUTPUT == *"SAMBA_ERROR"* ]]; then # その他エラー
    echo "エラー: $OUTPUT"
else
    echo "接続成功"
fi

5) rfriends3のユーザプロセス2を有効にする。

設定 - パラメータ - 編集
108行あたり

user_process2 = 1  

719行あたり

;; rftrans,delivery,user_process2 の処理モード  
rftrans_job_mode = 0  

[!NOTE] 通常は0で問題ありませんが rftrans,deliveryを設定している場合は注意が必要です。

6) その他

user_process2_ex.shを編集することにより、より複雑な処理が可能になります。
ここでは,$2,$3を使用していませんが、タイプ別、CH別に違う場所にコピーすることも可能です。
ただし注意点としては、排他処理を行っていないので
同一時間に終了した録音データが干渉しないよう注意する必要があります。

[!NOTE] scpやsftpを使っても同様のことが可能です。

以上