jsch ChannelExec запускает сценарий .sh с nohup, «теряет» некоторые команды - PullRequest
2 голосов
/ 03 июня 2011

У меня есть скрипт .sh, который склеивает множество других скриптов, вызываемых jsch ChannelExec из приложения Windows.

Channel channel = session.openChannel("exec");

((ChannelExec) channel).setCommand("/foo/bar/foobar.sh");

channel.connect();

если я запускаю команду типа "nohup /foo/bar/foobar.sh >> /path/to/foo.log &", все долгосрочные задания (операции с базой данных, обработка файлов и т. Д.), Похоже, теряются .

проверяя файл журнала, найдите только те эхосигналы (до и после длительной операции, рассчитайте время работы и т. Д.).

Я проверил разрешения, $ PATH, добавил источник / etc / profile в мой .sh, но ни одна из этих работ не работает.

но когда я запускаю команду в обычном режиме (синхронный запуск, вывод всех выводов эха на мой java-клиент на windows), все идет хорошо.

это действительно специфическая проблема. Надеюсь, что кто-то с опытом может помочь мне.

Спасибо заранее.

Han

1 Ответ

6 голосов
/ 08 июня 2011

Решено!

Другая проблема, которая часто возникает в этой ситуации, заключается в том, что ssh отказывается выходить из системы («зависает»), так как он отказывается потерять любые данные из / в фоновое задание(с). [6] [7]Эту проблему также можно решить путем перенаправления всех трех потоков ввода-вывода.

из http://en.wikipedia.org/wiki/Nohup

Возможно, psql и pg_bulkload выводят свои выходные данные в поток ошибок.

В моем скрипте я не перенаправлял потоки ошибок.

Все прошло хорошо, перенаправив потоки ошибок в один и тот же файл журнала.

nohup foo.sh > log.log 2>&1 &

Благодаря Ацухико Яманака он создал великолепную библиотеку JSch и Пажло Эбермандля документации .

...