rsyncコマンドを開始するbackup.shファイルがあります。このrsyncは、Raspbianを実行しているRaspberryPiから専用サーバーをバックアップするためのものです。
(私はキーチェーンを使用しているため、パスワードなどを入力する必要はありません...)
問題は、バッチを手動で起動するとすべてがうまく機能しますが、crontab(同じユーザーを使用)では次のエラーが発生することです。
2013/10/07 19:36:02 [6456] rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
2013/10/07 19:36:02 [6456] rsync error: error in rsync protocol data stream (code 12) at io.c(605) [Receiver=3.0.9]
これは私のbackup.shファイルです。
#!/bin/bash
echo "_ backup start "$(date +%H:%M:%S)
echo " "
/usr/bin/rsync -avh --rsync-path='/usr/bin/rsync' --delete --log-file='/home/user/rsync.'$(date +%d%m%Y-%H%M%S)'.log' --rsh='ssh -p 1234' [email protected]:/path/to/archives/ /media/backup/
echo " "
echo "_ backup end "$(date +%H:%M:%S)
これでcrontabライン(crontab -e)
# m h dom mon dow command
30 5 * * * /home/user/backup.sh | mail -s "Backup RPi "$(date +\%d/\%m/\%Y-\%X) [email protected]
挨拶
答え1
(私はキーチェーンを使用しているため、パスワードなどを入力する必要はありません...)
いいですね。 cronジョブで実行されているプログラムにキーチェーンを見つける方法を教えてください。
SSHは環境変数(キーチェーン偽装)を介してSSHエージェントを見つけますSSH_AUTH_SOCK
。したがって、crontabでこの環境変数を設定する必要があります。
一般的な構成では、ランダムなSSH_AUTH_SOCK
名前を持つソケットへのパスです。キーチェーンを使用しているので、そのソケットの代替名を簡単に見つけることができます。キーチェーンは、~/.keychain
設定SSH_AUTH_SOCK
やその他の類似変数(SSH_AGENT_PID
、、)GPG_AGENT_INFO
の環境変数宣言を含むファイルを作成します。したがって、クローン操作に適切なファイルを含めるだけです。
[email protected]
30 5 * * * . ~/.keychain/$(hostname)-sh; /home/user/backup.sh
(余談:cronにはジョブ出力を含むEメールを送信する機能が組み込まれているため、ジョブが実際に一部の出力を生成した場合にのみEメールを受信できます。操作は不要です| mail
。)
答え2
cronjobを介したSSH接続は機能しません。 SSH認証をどのように実行する必要がありますか? IDキーまたはパスワードを一覧表示しようとすると、表示されません。これがうまくいけば、(パスワードなし...)キーのパスに「-i」を貼り付けます。コマンドラインとcronjobの主な違いは、環境(環境変数、制御端末の不足など)によって異なります。
答え3
話題に引用問題があると思います。
mail -s "Backup RPi "$(date +\%d/\%m/\%Y-\%X) [email protected]
次のようにする必要があります。
mail -s "Backup RPi $(date +\%d/\%m/\%Y-\%X)" [email protected]
代替方法
また、メールをスクリプトにラップします。
#!/bin/bash
(
echo "_ backup start "$(date +%H:%M:%S)
echo " "
/usr/bin/rsync -avh --rsync-path='/usr/bin/rsync' --delete \
--log-file='/home/user/rsync.'$(date +%d%m%Y-%H%M%S)'.log' \
--rsh='ssh -p 1234' [email protected]:/path/to/archives/ /media/backup/
echo " "
echo "_ backup end "$(date +%H:%M:%S)
) | mail -s "Backup RPi $(date +\%d/\%m/\%Y-\%X)" [email protected]
次に、crontabエントリを次に変更します。
30 5 * * * /home/user/backup.sh
また、このクローンを実行しているアカウントが実際に電子メールを送信できることを確認してください。テストしてみてください。