Я использую cronjob для выполнения передачи файла на хост, а затем telnet на хост и передаю ему некоторые команды.
HOST=somehost
USER=postgres
PASSWD=blabla
ftp -n -v $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
put schema_1.sql
put schema_2.sql
quit
END_SCRIPT
(sleep 20;
echo "blabla2";
sleep 5;
echo "psql -d cb3db -f schema_1.sql";
echo "psql -d cb3db -f schema_2.sql";
echo "rm *.sql";
echo "exit;"
) | telnet -l postgres somehost
echo "END OF REMOTE SCRIPT" ||:
Кажется, что все, что я передаю / эхо в сеанс, выполняется параллельно, бывает, что выход выполняется до того, как sql завершит выполнение. Я попытался поставить засыпание перед командой выхода, но это скорее игра в догадки.
Я знаю, что этот подход, безусловно, не самый безопасный из-за паролей и т. Д. Так что, если есть более безопасный и надежный способ выполнить работу, дайте мне знать.
Спасибо за любые подсказки
"ожидать" - обычный способ написания сценария таких взаимодействий.
Perl также имеет IPC :: Run который я начинаю использовать после того, как довольно много использовал Expect (в Tcl и perl). Мой IPC::Run
код на основе, как правило, короче и легче читается, когда я закончу.
+1 за ожидание.
Однако, если вы похожи на меня, вам будет очень больно использовать tcl (ожидаемый родной язык).
Если вы покопаетесь в статье в Википедии, вы обнаружите, что существуют привязки perl и python (и, конечно, другие) для expect, которые позволяют вам делать все необходимые интерактивные вещи с гораздо меньшими затратами кода.
Удачи.