У меня есть .sh сценарий, который запускает мой сервис Java (я не записал это).
Кто-то может объяснить, как это на самом деле выполняется?
start() {
..
..
# setup classpath
. $ROOT/bin/_cp.sh
RUN="java -Dlog.root=$VAR $JOPTS $CP $MAIN -v"
# start
$RUN 2>>$OUT_FILE >>$OUT_FILE &
}
То, когда запускаются, называют, это создает, устанавливает переменные для опций и пути к классу (материал Java), но когда эта строка делает?
$RUN 2>>$OUT_FILE >>$OUT_FILE &
$RUN, что-то встроило вообще?
Я хочу преобразовать это в новомодный сценарий, и выскочка требует, чтобы я использовал exec
как:
script
[ "$enabled" = "1" ] || [ "$force_start" = "1" ] || exit 0
# Setup Serviio specific properties
JAVA_OPTS="-Djava.net.preferIPv4Stack=true -Djava.awt.headless=true -Dderby.system.home=$SERVIIO_HOME/library -Dserviio.home=$SERVIIO_HOME -Xmx512M -Xms20M -XX:+UseParNewGC -XX:MinHeapFreeRatio=10 -XX:MaxHeapFreeRatio=20"
# construct classpath
cd $SERVIIO_HOME
CLASSPATH="config"
for i in lib/*.jar; do
CLASSPATH="$CLASSPATH:$i"
done
# write to syslog - for debugging
# logger -t $0 -- "starting: /usr/bin/java $JAVA_OPTS -classpath $CLASSPATH org.serviio.MediaServer"
exec /usr/bin/java $JAVA_OPTS -classpath $CLASSPATH org.serviio.MediaServer
end script
Как уже упоминал Сет, $ RUN определен ранее в сценарии со строкой RUN="java ..."
. Строка выполняется, и стандартный вывод и стандартные сообщения об ошибках добавляются к $OUTFILE
, что, вероятно, также определено в сценарии (или задано параметром командной строки).
2>>file
- это код bash для перенаправления потока stderr. По умолчанию stdout и stderr выводятся в tty (ваше приглашение bash), где они отображаются, но вы можете перенаправить вывод. По умолчанию использование >> file
будет перенаправлять только стандартный вывод (материал, который печатается с использованием echo
- это обычная форма вывода для большинства программ. Однако, когда программы хотят выдать ошибку, это будет стандартный поток вывода ошибок, который (по умолчанию) выводится на терминал и НЕ перенаправляется с помощью >>
. Для перенаправления потока ошибок (возможно, для регистрации ошибок) вы используете 2>> file
, который добавит его к [ 117]. Интересно, что тот же эффект, что и в сценарии, может быть достигнут при использовании &>> $OUTFILE
, что является сокращением для «перенаправления как stdout, так и stderr».