Come utilizzare i miei alias nel mio crontab?

Ho alcuni comandi nel mio profilo che voglio ricall dal mio crontab .

Ad esempio, se ho,

  • Come cron gestisce i residui nei lavori "each tanto"?
  • Come applicare limiti di memory a tutti i lavori di cron?
  • OS X cron e variables di ambiente
  • Script per trasferire file utilizzando SSH
  • 406 Errore con il lavoro GET Cron?
  • Come scrivere i test di integrazione per i lavori cron?
  •  alias notify-me="~/bin/notify.pl -u user1" alias notify-team="~/bin/notify.pl -u user1 user2 user3 user4 ...." 

    Vorrei solo invocare l'alias

     0 11 * * * notify-team 

    quindi se l'elenco nel mio profilo è aggiornato, non devo aggiornare anche il crontab . Tuttavia, non sembra essere in grado di utilizzare alias nella mia crontab . C'è un lavoro intorno?

    Ho provato i suggerimenti qui per impostare l'ambiente (ad esempio / bin / bash -lc e lo script di script-wrapper). Sembra che funzioni per gli script ma non per gli alias.

    Qualche idea?

    6 Solutions collect form web for “Come utilizzare i miei alias nel mio crontab?”

    Dalla manpage relativa agli alias:

      Gli alias di nota non vengono espansi per impostazione predefinita in shell non interattivo,
     e può essere triggersta impostando le 'expand_aliases'
     opzione shell utilizzando shopt.
    

    Quindi provate a utilizzare shopt -s expand_aliases all'avvio del tuo script di approvvigionamento. Questo dovrebbe consentire di utilizzare il suggerimento di Warner.

    bash -c con "source" dovrebbe funzionare:

     0 11 * * * bash -c "source .profile && notify-team" 

    questo potrebbe anche funzionare. il periodo significa "sorgente"

     0 11 * * * . .profile && notify-team 

    Come Chris ha identificato, l'opzione di shell predefinita per le conchiglie non interattive è quella di non espandere gli alias. Ecco una soluzione che ho trovato per funzionare.

    Scrivere uno script, abilitare l'opzione shell e generare gli alias. Sii particolarmente consapevole del fatto che .bashrc è proveniente dall'esecuzione, per questo deve essere nuovamente acquistato dopo aver abilitato expand_aliases.

    Mi scuso per la raccomandazione inizialmente sbagliata. Questo era più oscuro di quanto inizialmente mi aspettavo.

    script:

     #!/bin/bash shopt -s expand_aliases source /home/wmoore/.bashrc notify-team 

    Mi piace l'idea di artifex di afferrare l'alias dal file e poi riutilizzarlo, poiché non riuscivo a trovare un modo per espandere o riutilizzare gli alias direttamente. (Altre soluzioni richiedono ancora un altro script.)

    Così ho scritto questa function e inserita nel mio profilo .profile:

     grab-alias () { sed -n '/alias\s*'$1'\s*=/ {s/[^'\'']*.//;s/'\''\s*$//p}' /home/bentrupk/.profile; } 

    Poi ho potuto usarlo nella mia crontab per vari alias come questo:

     0 11 * * * /bin/bash -lc 'x=`grab-alias notify-team`; $x' 0 7 * * * /bin/bash -lc 'x=`grab-alias notify-me`; $x' 

    eccetera.

    Yay, riutilizzo del codice! Ringrazia tutti.

    Davvero la cosa più semplice che potresti fare sarebbe quella di creare

    ~ / bin / notifica-me con

     #!/bin/sh ~/bin/notify.pl -u user1 

    ~ / bin / notifica team con

     #!/bin/sh ~/bin/notify.pl -u user1 user2 user3 user4 .... 

    gli alias shell sono complicati da mantenere e da integrare in altri sisthemes, come hai visto. la cosa migliore da fare è trasformarli in comandi a pieno titolo che non avranno problemi ambientali divertenti.

     0 11 * * * bash -ic "notify-team" > /log/file 

    per me va bene

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.