Ho sentito che crontab è una buona scelta, ma come faccio a scrivere la linea e dove la metto sul server?
Ho sentito che crontab è una buona scelta, ma come faccio a scrivere la linea e dove la metto sul server?
Risposte:
Ecco un buon tutorial su cos'è crontab e su come usarlo su Ubuntu. La tua linea crontab sarà simile a questa:
00 00 * * * ruby path/to/your/script.rb
( 00 00
indica la mezzanotte - 0 minuti e 0 ore - e la *
s significa ogni giorno di ogni mese).
Sintassi: mm hh dd mt wd comando mm minuto 0-59 ora 0-23 giorno del giorno 1-31 mt mese 1-12 wd giorno della settimana 0-7 (domenica = 0 o 7) comando: cosa vuoi eseguire tutti i valori numerici possono essere sostituiti da * che significa tutto
/etc/crontab
(su Ubuntu), ma quando esegui crontab -e
stai modificando un crontab specifico dell'utente, che non consente questa colonna. Ubuntu IIRC scoraggia l'uscita /etc/crontab
manuale perché potrebbe essere sovrascritto. Vedi qui: stackoverflow.com/questions/8475694/…
sudo crotab -u root -e
dalla pagina man
linux$ man -S 5 crontab
cron(8) examines cron entries once every minute.
The time and date fields are:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
...
# run five minutes after midnight, every day
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
...
È bene notare gli speciali "soprannomi" che possono essere utilizzati (documentati nella pagina man), in particolare "@reboot" che non ha alternative di data e ora.
# Run once after reboot.
@reboot /usr/local/sbin/run_only_once_after_reboot.sh
Puoi anche usare questo trucco per eseguire il tuo lavoro cron più volte al minuto.
# Run every minute at 0, 20, and 40 second intervals
* * * * * sleep 00; /usr/local/sbin/run_3times_per_minute.sh
* * * * * sleep 20; /usr/local/sbin/run_3times_per_minute.sh
* * * * * sleep 40; /usr/local/sbin/run_3times_per_minute.sh
Per aggiungere un lavoro cron, puoi fare una delle tre cose:
aggiungi un comando al crontab di un utente, come mostrato sopra (e dal crontab, sezione 5, pagina man).
crontab -e -u <username>
crontab -e
EDITOR
variabile di ambiente
env EDITOR=nano crontab -e -u <username>
export EDITOR=vim
crontab -e
chmod a+x <file>
creare uno script / programma come cron job e aggiungerlo alle /etc/cron.*ly
directory anacron del sistema
chmod a+x /etc/cron.daily/script_runs_daily.sh
- renderlo eseguibileman anacron
chmod a+x <file>
/etc/crontab
o /etc/anacrontab
per essere eseguiti a un'ora prestabilita/etc/anacrontab
e definiscono cron.hourly/etc/cron.d/0hourly
Oppure, Uno può creare crontable di sistema in /etc/cron.d
.
/etc/cron.d
Non è necessario che i file aggiunti siano eseguibili.someuser
e l'uso di /bin/bash
come shell è forzato. File: /etc/cron.d/myapp-cron
# use /bin/bash to run commands, no matter what /etc/passwd says
SHELL=/bin/bash
# Execute a nightly (11:00pm) cron job to scrub application records
00 23 * * * someuser /opt/myapp/bin/scrubrecords.php
A volte dovrai specificare PATH e GEM_PATH usando crontab con rvm.
Come questo:
# top of crontab file
PATH=/home/user_name/.rvm/gems/ruby-2.2.0/bin:/home/user_name/.rvm/gems/ruby-2.2.0@global/bin:/home/user_name/.rvm/rubies/ruby-2.2.$
GEM_PATH=/home/user_name/.rvm/gems/ruby-2.2.0:/home/user_name/.rvm/gems/ruby-2.2.0@global
# jobs
00 00 * * * ruby path/to/your/script.rb
00 */4 * * * ruby path/to/your/script2.rb
00 8,12,22 * * * ruby path/to/your/script3.rb
Guida rapida per l'impostazione di un processo cron
Crea un nuovo file di testo, ad esempio mycronjobs.txt
Per ogni lavoro giornaliero (00:00, 03:45), salvare le righe del programma in mycronjobs.txt
00 00 * * * ruby path/to/your/script.rb
45 03 * * * path/to/your/script2.sh
Invia i lavori a cron (ogni volta che esegui questo, cron cancella ciò che è stato memorizzato e aggiorna con le nuove informazioni in mycronjobs.txt )
crontab mycronjobs.txt
Ulteriori informazioni utili
Vedi i lavori cron correnti
crontab -l
Rimuovi tutti i lavori cron
crontab -r
È possibile eseguire lo script di shell in due modi, utilizzando cron job o scrivendo uno script di shell
Supponiamo che il nome del tuo script sia "yourscript.sh"
Prima controlla l'autorizzazione dell'utente dello script. utilizzare il comando seguente per verificare l'autorizzazione dell'utente dello script
ll script.sh
Se lo script è nella radice, utilizzare il comando seguente
sudo crontab -e
Secondo se lo script contiene l'utente "Ubuntu", quindi usa il comando seguente
crontab -e
Aggiungi la seguente riga nel tuo crontab: -
55 23 * * * /path/to/yourscript.sh
Un altro modo per farlo è scrivere una sceneggiatura ed eseguirla nel backgroud
Ecco lo script in cui devi inserire il nome del tuo script (ad esempio: - youscript.sh) che verrà eseguito ogni giorno alle 23:55
#!/bin/bash
while true
do
/home/modassir/yourscript.sh
sleep 1d
done
salvalo in un file (chiamiamolo "every-day.sh")
sleep 1d - significa che attende un giorno e quindi viene eseguito nuovamente.
ora dai il permesso al tuo script.use sotto il comando: -
chmod + x every-day.sh
ora, esegui questo script di shell in background usando "nohup". Ciò continuerà a eseguire lo script anche dopo la disconnessione dalla sessione.
utilizzare il comando seguente per eseguire lo script.
nohup ./every-day.sh &
Nota: - per eseguire "yourscript.sh" ogni giorno alle 23:55, è necessario eseguire lo script "every-day.sh" esattamente alle 23:55.