何か抜けていると思います。私はいくつかのバックアップを処理するためにSSHを介してrsyncを処理するためにオフィスにいくつかのcrontabを設定しましたが、その問題に対して実行またはログに記録されないようです。私は何を逃したことがありませんか?
これは私のクローンタブです:
0 2 * * * idealm /usr/bin/local/rsync -avz --rsync-path=/usr/bin/rsync -e ssh /Ideal\ Machinery\ Database/* [email protected]:~/db_backup >> /home/idealm/Work/cron_log.txt
^ Mac MiniサーバーからSMEサーバーへ
0 2 * * * i /usr/bin/rsync -avz --rsync-path=/usr/local/bin/rsync -e ssh /home/e-smith/files/ibays/drive-i/files/Warehouse\ Pics/Converted\ Warehouse\ Pictures/* [email protected]:/ideal_img >> /home/i/cron_log.txt
^ SMEサーバーからMac Miniサーバーへ
0 2 * * * i /usr/bin/rsync -rvz -e ssh /home/e-smith/files/ibays/drive-i/files/Warehouse\ Pics/* fm-backup@[remote server]:/home/fm-backup/img_all/ >> /home/i/cron_log.txt
0 2 * * * i /usr/bin/rsync -rvz -e ssh ~/db_backup/* fm-backup@[remote server]:~/db_backup/ >> /home/i/cron_log.txt
^ SMEサーバーからUbuntu 10.10を実行しているリモートサーバー(ここで[remoteserver]はレビューアドレスです)
問題は、bashでこれらのタスクを実行すると、すべてがうまく動作することです。 cronが動作しないようです。どんな提案がありますか?
ベストアンサー1
まず、いくつかの簡単なcronjobを試して、ここでビルドしてください。
0 12 * * * user echo 'Hello, World!' >> /tmp/test.log 2>&1
1 12 * * * user ssh anotheruser@anotherhost ls >> /tmp/test.log 2>&1
2 12 * * * user rsync -e ssh anotheruser@anotherhost:/path/to/small/dir /tmp/test-dir >> /tmp/test.log 2>&1
最初はあまりにも多くのオプションを使用しないでください。ただし、2>&1
エラーメッセージを受信するには使用が重要です。2>/tmp/test-error.log
を使用して別のファイルに送信することもできます。通常、cronは出力がある場合にのみ電子メールを生成します。電子メールは、crontabで設定されたMAILTO環境変数に記載されている電子メールアドレスまたはローカルUnixユーザーに送信され、MAILTOが設定されていないかのようにタスクが実行されます。メールサーバーがインストールされていない場合、またはアクセス方法がわからない場合は、すべての出力をファイルにリダイレクトできます。注意すべきもう一つのことは、SHELLを設定することです。デフォルトでは、cronは/bin/shを使用しますが、これは一般的には大丈夫で、一部のシステムでは/bin/bashへのシンボリックリンクかもしれませんが、そうでない場合は、コマンドにbash-ismsを使用するために追加するか、SHELL=/bin/bash
他の項目をタスクに適用できますあります。前に上場。
上記のcrontabで見られるもう1つの問題は空白です。これらのコマンドは通常のシェルで動作するため、問題にならない可能性がありますが、一部のリモートsshコマンドを使用する場合は空白に注意してください。たとえば、次のssh server ls "Music Videos"
コマンドのスペースは、ローカルシェルとリモートシェルの両方で二重エスケープする必要があるためです。シェルはそれらを説明できます。正しいコマンドは次のようにする必要があります。ssh server ls "Music\\ Videos"
またはssh server ls '"Music Videos"'
私が考えることができる最後のものはSSH認証の失敗です。公開鍵認証を使用しているとします。公開鍵はどこに保存されていますか?暗号化されていない秘密鍵ですか~/.ssh/id_rsa
、それともSSH公開鍵エージェントにロードされますか?ディスク上のコピーが暗号化されてエージェントにロードされている場合は、rsyncが実行されたときに実行されるエージェントを指すようにcrontabでSSH_AUTH_SOCKを手動で設定したことを確認する必要があります。私は通常秘密鍵をディスクに暗号化されたままにし、固定ソケットパスを使用してバックグラウンドでssh-agentを実行します。たとえば、ssh-agent -a /tmp/user.agent
次を実行して秘密鍵をSSH_AUTH_SOCK=/tmp/user.agent ssh-add .ssh/id_rsa
エージェントにロードします。秘密鍵のロックを解除するにはパスワードを入力する必要があるため、再起動するたびに手動で実行するスクリプトには2つのコマンドがあります。次に、SSH_AUTH_SOCK=/tmp/user.agent
自動化されたcronjobで使用できるようにcrontabファイルに保存します。