cronからシェルスクリプトにパラメータを渡すことができない理由[閉じる]

cronからシェルスクリプトにパラメータを渡すことができない理由[閉じる]

このcronスクリプトを使用してRsyncを操作しようとしています。

*/1 * *    * * /root/backup.sh  `date +today/\%M`

そして以下のようなシェルスクリプト

#!/bin/bash -x
PATH=/bin:/usr/bin:/sbin:/usr/sbin
REMOTE="REMOTEADDRESS"
RSYNC=/usr/bin/rsync

コメント:これはうまくいきます。

$RSYNC -aqz --exclude-from '/home/root/backups/backup-exclude.txt' /var/www/html $REMOTE:backups/

コメント:失敗しました

$RSYNC -aqz  --exclude-from '/home/root/backups/backup-exclude.txt' /var/www/html $REMOTE:$1/

渡されたパラメータがスクリプトに正しく渡されない理由を理解できません。ログにはすべてが期待どおりに表示されます。

cronアップデートスクリプトにパラメータを含めずにパラメータを渡す理由は、次のことを許可するバックアップ計画を設定するためです。 - 毎日の時間別バックアップのバックアップ - 毎月のバックアップ毎日のバックアップ - 毎月の耐久性のあるバックアップ

パラメータを渡すときに発生するエラーは、RSyncがリモートサーバーでmkdirを実行できないことです。すべての静的ラインで使用できます。ログには、現在cronを使用しているときに渡された正しいディレクトリが表示されます。

答え1

dest/dirコピーするディレクトリがリモートシステム()にあることを確認する必要があります。

rsync -aqz ./ user@host:dest/dir

少なくとも最後のディレクトリを除くすべてのディレクトリがすでに存在している必要があります。これはmkdirと同じ動作ですmkdir。 mkdirは最後のディレクトリのみを生成します(デフォルトではこの-pオプションで変更できます)。つまり、リモートシステムに存在しない限りrsync失敗します。/home/user/dest/dir

それは関連している比較的目次。

でも同じ状況が発生します純粋なディレクトリ(で始まるディレクトリ/):

rsync -aqz ./ user@host:/home/user/dest/dir

ルールはまったく同じですが、ディレクトリは異なります。推定ユーザーのホームディレクトリにありますが、どこにでも配置できます(もちろん、ユーザーに書き込み権限が必要です)。


rsync追加のテストでは、ifが次のディレクトリを使用していることがわかりました。

newdir/testdir

少なくともnewdirディレクトリが存在する必要があります。これはmkdirと完全に同じです。 dirがmkdir newdir/testdirなければ、newdirAは失敗します。

報告したのと同じスクリプトを使用してテストしました。

  • 固定ディレクトリとともに使用されます。
  • 引数に指定されたディレクトリ、
  • スクリプト引数$1で指定されたディレクトリ
  • 上記の操作はすべてcronの有無にかかわらず繰り返されます。

すべての場合に初期ディレクトリがありません。二つの部分ディレクトリのインポートrsyncに失敗しました。

関連情報