これは私のスクリプトです、backup_mongo.sh
#!/bin/bash
suffix=$(date +%w)
rm /home/myuser/backup/mongo-$suffix -rf
mkdir /home/myuser/backup/mongo-$suffix
mongodump -h$1 -u$2 -p$3 -dmydb -o/home/myuser/backup/mongo-$suffix
私のcrontab -e
:
0 3 * * * /bin/bash /home/myuser/myproject/production/backup_mongo.sh localhost user1 pass1
スクリプトを正常に実行すると(上記のコマンドを実行すると)、スクリプトが機能し、ディレクトリ「mydb」が/ mongo- $ suffixに作成されます。
ただし、これをcrontabに入れると、/ mongo- $サフィックスが作成されますが、「mydb」ディレクトリは存在しません。/mongo- $ suffixには何もありません。
mongodump
にPATH
が含まれていない可能性があります。 mongodump
コマンドへの絶対パスを使用してみてください。
PATHの問題である可能性が非常に高いですが、crontabでPATHをオーバーライドしないことをお勧めします。
フルパスを変数としてトリガーするすべてのバイナリを定義するための優れたbash/shコーディングスタイル
!#/bin/bash
RSYNC="/usr/bin/rsync"
後で変数を参照します。
$RSYNC /foo/bar baz
Crontabを実行しているユーザーを変更するための特定のオプションもあります。 mongodumpを含むPATHを定義したmongodumpというユーザーがいるとすると、このユーザーになってcrontabを編集できます。または、使用することもできます
/bin/bash /bin/su - mongodump -c /bin/bash /home/myuser/myproject/production/backup_mongo.sh
ルーツのcrontabで。
CronのデフォルトのPATHは制限されています。通常は/usr/bin:/bin
。これらのディレクトリの外で何かを実行したい場合は、いくつかのオプションがあります
コマンドへのフルパスを使用します。 /path/to/mongodump/mongodump ...
Crontabで拡張PATHを定義します。例:.
PATH=/usr/bin:/bin/:/path/to/mongodump
0 3 * * * /bin/bash /home/myuser/myproject/production/backup_mongo.sh localhost user1 pass1
実行しているスクリプトでPATHを定義します
#!/bin/bash
PATH=/usr/bin:/bin:/paath/to/mongodump
suffix=$(date +%w)
rm /home/myuser/backup/mongo-$suffix -rf
mkdir /home/myuser/backup/mongo-$suffix
mongodump -h$1 -u$2 -p$3 -dmydb -o/home/myuser/backup/mongo-$suffix