Linux: come eseguire un comando in una determinata directory


16

Voglio semplicemente eseguire un comando (in realtà è uno script di shell) da una determinata directory come cron job. Come posso eseguirlo in modo che sia impostato su una determinata directory senza utilizzare cd.

Risposte:


16

La tua domanda ha poco senso. Usa cd. Se chiedi la risposta per non utilizzarla cdperché l'hai provata e non ha funzionato, è probabile che tu non l'abbia inserita correttamente nel crontab.

Il modo più semplice sarebbe quello di scrivere un piccolo script shell che eseguirà cd ed eseguirà l'attività principale, quindi cron lo script.


1
Crontab può permettermi di inserire più comandi all'interno di un lavoro? Altrimenti dovrei codificare il cd [percorso]. E il percorso potrebbe cambiare, causando così fastidiosi problemi di distribuzione e anche decentralizzare la configurazione, cosa che sto evitando a tutti i costi.
Zombi,

1
@Zombies: sì, puoi inserire più comandi all'interno di un lavoro (es. Separandoli con punto e virgola o &&), ma puoi anche scrivere uno script separato che contenga tutti i comandi e inserire il percorso dello script in cron, come suggerito da Daenyth. Il tuo script potrebbe fare qualcosa come leggere la directory da un file di configurazione, se vuoi: il punto è, comunque tu voglia ottenere il nome della directory nel tuo script, non è una scusa per non usarlo cd.
David Z,

Vedo. Vorrei usare il cd direttamente sul crontab poiché, se lo scrivo in un file, dovrò modificarlo in ogni file, il che rende le configurazioni delicate / facili da rompere.
Zombi,

3
E se metti il ​​cd nel file crontab, dovrai modificarlo in ogni file crontab. Non capisco il problema. Forse potresti spiegare cosa stai cercando di fare in modo più completo.
garyjohn,

E l'altro motivo per eseguire uno script di shell dal file crontab è assicurarsi che l'ambiente sia impostato correttamente. L'ambiente dato a un lavoro cron è normalmente a malapena minimo, quindi di solito è necessario ripristinarlo su qualcosa di più utilizzabile.
Jonathan Leffler,

57

Basta specificare il percorso dello script. Non c'è bisogno di cd:

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

Se lo script cerca i file in ., allora si sarà necessario utilizzare cd:

0 12 * * * cd /some/dir && /path/to/script args


4
&&, come nella risposta a cui si collega @WillSheppard, sarebbe meglio di ;perché &&esegue il comando successivo solo se il comando precedente ha avuto esito positivo.
Max Heiber,

1
@mheiber: risolto
Dennis Williamson,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.