일:
매일 밤 bash 스크립트를 실행하는 Cronjob을 만듭니다. bash 스크립트는 mongoDB 백업을 수행하고 이를 Git Repo에 푸시해야 합니다.
그래서 cronjob
다음 명령을 통해 루트 사용자를 만들었습니다 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시 사이에 매분마다 실행하시겠습니까?