Linux: cómo ejecutar un comando en un directorio dado

16

Simplemente quiero ejecutar un comando (en realidad es un script de shell) desde un directorio dado como un trabajo cron. ¿Cómo puedo ejecutarlo para que esté configurado en un directorio dado sin usar cd?

Zombis
fuente

Respuestas:

16

Tu pregunta tiene poco sentido. Uso cd. Si solicita la respuesta para no usarla cdporque la ha probado y no funcionó, es probable que no la haya ingresado correctamente en el crontab.

La forma más sencilla sería escribir un pequeño script de shell que cd y ejecutará su tarea principal, luego cron el script.

Daenyth
fuente
1
¿Puede crontab permitirme poner múltiples comandos dentro de un trabajo? Si no, tendría que codificar el cd [ruta]. Y la ruta puede cambiar, causando problemas de implementación realmente molestos y también descentralizando la configuración, que es algo que estoy evitando a toda costa.
Zombies
1
@ Zombies: sí, puede poner varios comandos dentro de un trabajo (por ejemplo, separarlos con punto y coma o &&), pero también puede escribir un script separado que contenga todos los comandos y simplemente poner la ruta al script en cron, como sugirió Daenyth. Su script podría hacer algo como leer el directorio de un archivo de configuración si lo desea: el punto es que, sin embargo, si desea obtener el nombre del directorio en su script, no es excusa para no usarlo cd.
David Z
Veo. Querré usar cd en el crontab directamente ya que si lo escribo en un archivo, tendré que editarlo en cada archivo, lo que crea configuraciones delicadas / fáciles de romper.
Zombies
3
Y si coloca el CD en el archivo crontab, tendrá que editarlo en cada archivo crontab. No entiendo el problema. Tal vez podrías explicar lo que estás tratando de hacer más completamente.
garyjohn
Y la otra razón para ejecutar un script de shell desde el archivo crontab es asegurarse de que el entorno esté configurado correctamente. El entorno dado a un trabajo cron normalmente es apenas mínimo, por lo que generalmente debe restablecerlo a algo más utilizable.
Jonathan Leffler
60

Simplemente especifique la ruta al script. No hay necesidad de cd:

0 12 * * * /path/to/script args

Si su script busca archivos ., entonces tendrá que usar cd:

0 12 * * * cd /some/dir && /path/to/script args
Pausado hasta nuevo aviso.
fuente
2
Ver también serverfault.com/questions/290313/…
Will Sheppard
44
&&, como en la respuesta @WillSheppard enlaza a, sería mejor que ;porque &&solo ejecuta el siguiente comando si el comando anterior fue exitoso.
Max Heiber
1
@mheiber: fijo
pausa hasta nuevo aviso.