У меня есть сценарий bash, который получает информацию от Heroku, чтобы я мог вытащить копию моей базы данных. Этот скрипт отлично работает в cygwin. Но для запуска его в cron он останавливается, потому что оболочка, которая использует остановки, как аутентификация Heroku через Heroku Toolbelt.Ожидание не удается, но я не понимаю, почему
Вот мой кронтаб:
SHELL=/usr/bin/bash
5 8-18 * * 1-5 /cygdrive/c/Users/sam/work/push_db.sh >>/cygdrive/c/Users/sam/work/output.txt
Я прочитал Googles и страницу человека внутри Cygwin, чтобы придумать с этим дополнением:
#!/usr/bin/bash
. /home/sam.walton/.profile
echo $SHELL
curl -H "Accept: application/vnd.heroku+json; version=3" -n https://api.heroku.com/
#. $HOME/.bash_profile
echo `heroku.bat pgbackups:capture --expire`
#spawn heroku.bat pgbackups:capture --expire
expect {
"Email:" { send -- "$($HEROKU_LOGIN)\r"}
"Password (typing will be hidden):" { send -- "$HEROKU_PW\r" }
timeout { echo "timed out during login"; exit 1 }
}
sleep 2
echo "first"
curl -o latest.dump -L "$(heroku.bat pgbackups:url | dos2unix)"
Вот выход из output.txt
/usr/bin/bash
{
"links":[
{
"rel":"schema",
"href":"https://api.heroku.com/schema"
}
]
}
Enter your Heroku credentials. Email: Password (typing will be hidden): Authentication failed. Enter your Heroku credentials. Email: Password (typing will be hidden): Authentication failed. Enter your Heroku credentials. Email: Password (typing will be hidden): Authentication failed.
Как вы можете видеть, похоже, что результат не получает результат команды send, так как он ap груши его ждут. Я сделал так много экспериментов с полномочиями и ожиданиями. Все останавливается здесь. Я видел несколько примеров и пытался попробовать их, но я получаю нечеткие взгляды, поэтому я публикую здесь. Что я не понимаю?
Благодаря комментариям, я напомнил явно кладу ENV переменные в .bashrc:
[[ -s $USERPROFILE/.pik/.pikrc ]] && source "$USERPROFILE/.pik/.pikrc"
export HEROKU_LOGIN=myEmailHere
export HEROKU_PW=myPWhere
Мой Исправленный скрипт на @ отличный пример Динеша ниже:
. /home/sam.walton/.bashrc echo $SHELL echo $HEROKU_LOGIN curl -H "Accept: application/vnd.heroku+json; version=3" -n https://api.heroku.com/
expect -d -c " spawn heroku.bat pgbackups:capture --expire --app gw-inspector expect {
"Email:" { send -- "myEmailHere\r"; exp_continue}
"Password (typing will be hidden):" { send -- "myPWhere\r" }
timeout { puts "timed out during login"; exit 1 } } " sleep 2 echo "first"
Это должно работать но в то время как эхо переменной не удается, давая мне понять, что переменная не вызывается, я проверяю жестко кодирование переменных, чтобы исключить это как переменную. Но, как вы можете видеть по моему результату, не только эхо ничего не дает, не существует понятия, что какая-либо диагностика передается, что заставляет меня задаться вопросом, даже сценарий запускается из ожидаемого, а также результат появления команда. Чтобы повторить, команда heroku.bat работает вне закрытия ожидания, но результаты выше. Результат команды непосредственно выше:
/usr/bin/bash
{
"links":[
{
"rel":"schema",
"href":"https://api.heroku.com/schema"
}
]
}
Что я делаю неправильно, что покажет мне диагностические заметки?
Являются ли переменные окружения 'HEROKU_LOGIN' и' HEROKU_PW' объявленными в вашем файле '.bashrc'? – Dinesh