Это мой сценарий, 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- $ нет ничего.
У вас может не быть mongodump
в твоем PATH
. Попробуйте использовать абсолютный путь к mongodump
команда.
Скорее всего, это проблема с PATH, но я бы рекомендовал НЕ переопределять PATH в вашем crontab, потому что это
Его хороший стиль кодирования 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 ограничен. Это обычно /usr/bin:/bin
. Если вы хотите запустить что-либо за пределами этих каталогов, у вас есть несколько вариантов
Используйте полные пути к командам, например /path/to/mongodump/mongodump ...
Определите расширенный PATH в crontab, например.
PATH=/usr/bin:/bin/:/path/to/mongodump
0 3 * * * /bin/bash /home/myuser/myproject/production/backup_mongo.sh localhost user1 pass1
Определите ПУТЬ в скрипте, который вы запускаете
#!/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