Tengo la siguiente línea nueva en mi archivo .sh
su --session-command='$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile' $serviceUser || return 1
Cuando lo tenía entre comillas dobles, funcionó un poco, pero el pidFile tenía el pid incorrecto y estaba desviado en uno. La solución de la investigación fue utilizar comillas simples y no puedo hacer que funcionen.
Ahora me salen 2 errores
bash: $pidFile: redireccionamiento ambiguo
bash: $serviceLogFile: redireccionamiento ambiguo
¿Parece que no puedo usar variables o generar variables entre comillas simples?
Esta línea casi funciona, pero el pid tiene un error de uno.
Este código a continuación comenzaría desde el inicio, pero el pid es incorrecto.
su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1
que tuvo que reemplazar este antiguo código de 2 líneas con errores.
cmd="nohup $javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile"
# Don't forget to add -H so the HOME environment variable will be set correctly.
sudo -u $serviceUser -H $SHELL -c "$cmd" || return 1
El código antiguo funcionaba bien pero no se podía iniciar desde el arranque.
Respuesta1
El ID del proceso tiene un error de uno porque ha puesto un extra &
después del $javaCommandLine
. En otras palabras, ha puesto dos procesos en segundo plano antes de llamar a echo $!
, obteniendo así el PID de >>$serviceLogFile 2>&1
en lugar de $javaCommandLine
. Esas dos piezas deben colocarse en una, como muestran los antiguos códigos de 2 líneas.
su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1
Es posible que tengas que cambiarlo a...
su --session-command="$javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1