У меня есть сценарий оболочки, который порождает Java-процесс, который я хотел бы обернуть в оболочку для использования с monit.Сценарий оболочки монитора с monit
Я попытался MONIT рекомендацию
#!/bin/bash
name=`basename $1`
case $2 in
start)
echo $$ > /var/run/service.pid;
exec 2>&1 $1 1>/var/log/$name.stdout
;;
stop)
kill `cat /var/run/service.pid` ;;
*)
echo "usage: <path to app> {start|stop}" ;;
esac
Где бы использовать его как wrapper.sh /usr/sbin/cmd start
Когда я делаю это, я вижу 2 procesess раскручивается. Один из них - это exec в оболочке, а другой - мой java-процесс.
Однако pid $$
- это оболочка/usr/sbin, а не фактический процесс java. Поэтому, если я «остановил» службу или убью этот pid, тогда процесс java становится сиротой.
С другой стороны, если я запускаю /usr/sbin/cmd
на переднем плане, а затем убиваю его, он убивает дочерний процесс.
Если вы 'exec' процесс Java как сценарий aove Dows, указанный процесс Java заменит процесс оболочки работает обертку и, таким образом, будет держать тот же PID. Ваша проблема в том, что java-процесс дополнительно расширяет другие процессы. – lcd047
Спасибо, это был ключ, который мне нужен. В команде/sbin, которая запускает мой Java-процесс, мне также нужно добавить 'exec' перед вызовом java, чтобы он также использовал один и тот же pid. Теперь в моей sbin-оболочке у меня есть 'exec java ...', и все это отлично работает. Благодаря! – devshorts