2010-02-08 20 views
6

He intentado exportar mis rutas de acceso y variables y crontab todavía no ejecutará mi script. Estoy seguro de que estoy haciendo algo mal.script de shell que no se ejecuta mediante crontab, se ejecuta correctamente manualmente

Tengo un script de shell que ejecuta un archivo jar. Esto no está funcionando correctamente.

Después de leer He leído que esto se debe comúnmente a rutas incorrectas debido a la ejecución cron a través de su propia instancia de shell y por lo tanto no tiene las mismas preferencias de configuración que mi perfil.

Esto es lo que mi script se parece hoy después de varias modificaciones:

#!/bin/bash -- 

. /root/.bash_profile 

/usr/bin/java -jar Pharmagistics_auto.jar -o 

... 

esas son las piezas más importantes de la secuencia de comandos, el resto son cáscara sencilla basada.

¿Alguien me puede decir lo que estoy haciendo mal?

+3

¿Por qué está utilizando una ruta relativa al binario java en lugar de una ruta absoluta? – jamessan

+0

probablemente más apropiado para serverfault o superuser –

+0

Lo siento, supongo que estoy un poco fuera de contacto con mi uso de 'nix. ¿Cómo puedo averiguar la ruta absoluta de mi ejecutable de Java? ¿No cuenta el 'whereis java'? Creo que te puedes estar refiriendo a mi error tipográfico de usr/bin/java. Desde entonces he rectificado esto. Si esto no es lo que usted quiso decir, hágamelo saber y lo arreglaré. – astro

Respuesta

13

intente especificar la ruta completa del archivo jar:

/usr/bin/java -jar /path/to/Pharmagistics_auto.jar -o 
+1

Acabo de darle una bofetada en la frente. Buena captura, gracias por la ayuda que Dennis solucionó el problema. ¡Realmente lo aprecio! – astro

3

Simplemente le diría lo que ya ha descartado: verifique su ruta y su entorno.

Como ya ha hecho esto, comience a depurar. Al igual que escribir puntos de control en un archivo de registro para ver qué tan lejos se encuentra su script (si es que comenzó), revise el archivo de registro cronjob para detectar errores, revise su correo (cron envía correos electrónicos sobre errores) y así sucesivamente ...

No muy específico, lo siento.

+0

He intentado MAILTO = myemail pero por alguna razón no he recibido ningún correo electrónico. También he comprobado los registros de cron/var/log/cron y parece que está ejecutando el script, pero no la parte de Java. – astro

1

Algunas reflexiones.

  1. Retire la -- después de la #!/bin/bash
  2. Asegúrese de que a la salida de la escritura directa visto por cron de correo o en otro lugar donde se puede ver que (por ejemplo mailto = desiredUser)
  3. Confirmar que se ejecuta un script y no bloqueado por un script de larga duración diferente (por ejemplo, en la segunda línea, añadir touch /tmp/MY_SCRIPT_RAN && exit)
  4. Depurar la secuencia de comandos utilizando set -x y set -v una vez que se sabe que está actualmente en funcionamiento
+0

1. He eliminado el -, para observar que también he intentado agregar -l en vano. 2. MAILTO por alguna razón no me está enviando ningún correo electrónico, no estoy seguro de por qué este sería el caso.He agregado el [email protected] justo antes de mi texto de cronjob real y cuando crun crontab cron.txt se digiere bien, pero todavía no hay correos electrónicos. 3. Mi script se está ejecutando y está ejecutando comandos de shell muy bien, es solo la parte de Java que no se está ejecutando, sin embargo, no me arroja ningún error. 4. ¿Qué quieres decir con esto? establecer algo antes y después de las partes del código que soy cuestionable? – astro

+0

@astro - RE # 2 - configúrelo en una cuenta de usuario en la máquina local, RE # 3 - Gracias por aclarar. RE # 4 - Al agregar el comando 'set -x' al script, bash le mostrará lo que está ejecutando. 'set -v' proporciona más información sobre evaluación y expansión de comandos. –

+0

2. no estoy seguro de si los correos electrónicos se han configurado para esta caja, lamentablemente. 4. Agregué el conjunto -v al guión y todavía no tuve suerte. No obtengo absolutamente nada. Cambié la secuencia de comandos a/usr/bin/java -jar Pharmigistics.jar -o> javalog.txt y el javalog siempre está vacío. No veo ningún mensaje de error en ninguna parte, el/var/log/cron me dice que todavía está ejecutando mi script, esa parte de mi script simplemente no hace nada. – astro

2

"exportar mis rutas y variables" no funcionará, ya que crontab se ejecuta en un shell diferente por un usuario diferente.

Además, no estoy seguro si esto es un error tipográfico en la forma en que ha introducido la pregunta, pero no veo:

usr/bin/java

... y no puedo ayudar pero notas' no se especifica la ruta completa. Está buscando un directorio llamado "usr" en el directorio de trabajo actual. A veces, para crontab, el cwd no está definido, por lo tanto, su referencia no va a ninguna parte.

intente especificar la ruta completa desde la raíz, así:

/usr/bin/java

O bien, si desea ver un ejemplo de encauzamiento relativa en acción, también se podría tratar:

cd /

usr/bin/java

+0

que fue un error tipográfico gracias por señalarlo. – astro

0

¿Define las rutas y envolventes necesarios en su .profile personal (u otro script)? ¿Ha intentado obtener ese archivo en particular (o es lo que ya está haciendo con /root/.bash_profile?)

Otra forma de preguntar esto es: ¿está seguro de que los caminos y caminos necesarios que espera sean en realidad ¿disponible?

Si nada más, ¿ha intentado hacer eco de los valores individuales o simplemente utilizando el comando "env" en su secuencia de comandos y luego revisar el stdout?

+0

Creo que estoy obteniendo el archivo con el '. /root/.bash_profile 'comando. No estoy seguro, pero he ejecutado un cronjob y he ejecutado un archivo env> conEnv.txt y luego comparé los resultados con mis propios resultados del comando env. Obviamente, los resultados fueron caminos de exportación muy diferentes, etc. Intenté agregar lo siguiente en lugar del '. /root/.bash_profile 'part: PATH = ... [mis entornos aquí copiados/pegados de los resultados de ejecutar env con mi perfil de usuario] ...; RUTA de exportación; y eso tampoco funcionó. – astro

0

proporcionan rutas completas a su archivo jar, y lo que el usuario ¿Está ejecutando el crontab en? Si lo configura para un usuario normal, ¿cree que ese usuario tiene permiso para obtener el perfil raíz?

Cuestiones relacionadas