仕事:
毎晩 bash スクリプトを実行する Cronjob を作成します。 bashスクリプトはmongoDBバックアップを実行し、それをGit Repoにプッシュする必要があります。
だから、cronjob
次のコマンドでrootユーザーを作成しましたcrontab -e
。
#!/bin/bash
SHELL=/bin/bash
USER=root
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PWD=/root
HOME=/root
0 2 * * * /path/script.sh > /path/script.log
実行するスクリプトは次のとおりです。
BAK="/path"
#MONGO="/usr/bin/mongo"
#MONGODUMP="/usr/bin/mongodump"
#GIT="/usr/bin/git"
echo "starting backup"
echo $BAK
/usr/bin/mongodump --username=myusername --password=mypassword --db=mydatabase --out=$BAK$
echo "backup created"
/usr/bin/git add .
/usr/bin/git commit -m "backup from `date +'%Y_%m_%d'`"
echo "committed"
/usr/bin/git push -u origin master
echo "pushed backup. done"
結果:
バックアップは作成されていますが、ストレージにプッシュされません。スクリプトを手動で実行すると、必要に応じてバックアップがプッシュされます。ログにはスクリプト内のすべてのエコーのみが含まれます。
答え1
コマンドを実行したときに正しいディレクトリにありましたかgit
?つまり、git add .
コマンドの実行時にリポジトリについて知っていますか?
以下を使用してスクリプトからディレクトリに変更しますcd
。BAK
cd "$BAK"
それに加えて、2>&1
cronjob行に追加してエラー出力をキャプチャしてみてください。
$BAK$
私が注目したもう一つのことは、atパラメータを使用したことです--out=
。私の考え%VAR%
はWindowsと少し似ているようです。出力しますか$BAK$
?それともそれはどういう意味ですか$BAK
?
最後に、このスクリプトを午前2時から午前3時の間で毎分実行しますか?