GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Cron Job non viene eseguito?

Stavo facendo un cron job per salvare il mio mondo di Minecraft dalla mia ram ogni 5 minuti.
Ho testato lo script e sembra funzionare.

Ecco come appare lo script:

#!/bin/sh


VOLATILE="/home/jonathan/Games/Minecraft/Server/world/"
PERMANENT="/home/jonathan/Games/Minecraft/Server/world_storage/"
rsync -r -t -v "$VOLATILE" "$PERMANENT"

Quindi sono andato ad aggiungere un lavoro cron per eseguire lo script ogni 5 minuti e sembra non eseguirlo.

Questo è lo script che ho usato:

*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh

Qualcuno può aiutarmi per favore?

Risposta accettata:

Non hai specificato come hai aggiunto il tuo cronjob. Questo fa una grande differenza:se hai usato crontab -e all'interno del tuo account, gli script vengono eseguiti con il tuo utente (e quindi la voce crontab ha un campo in meno:l'utente che lo esegue, come è noto). Se hai semplicemente copiato lo snippet sopra in /etc/cron.d , fallirebbe perché non hai specificato un utente (o meglio perché non trova alcun utente chiamato "bash"). Quindi dovresti eseguire i seguenti passaggi:

  1. aggiorna la tua domanda con informazioni su come hai aggiunto il lavoro cron
  2. controlla i log di sistema (/var/log/syslog; potrebbero indicare possibili errori)
  3. aggiungi dell'output di debug al tuo Backup.sh script per vedere se è avviato

Il terzo punto può essere raggiunto in diversi modi:

  • aggiungi un >>/tmp/testlog.log alla fine della tua voce crontab (per reindirizzare l'output a un file su cui puoi investigare; inoltre, un 2>&1 includerebbe l'output dalla console degli errori)
  • aggiungi alcune righe al tuo script stesso, come ad es. echo "Backup.sh started">/tmp/testlog.log

Inoltre:poiché intendi eseguire lo script utilizzando bash , non dovresti dirgli di usare /bin/sh (che farebbe usare dash su un'installazione Ubuntu predefinita), ma piuttosto /bin/bash . Quindi rendilo eseguibile e puoi persino omettere "bash" dalla tua voce crontab.

Aggiornamento:

Secondo il tuo commento sulla mia risposta, hai usato crontab -e per creare il lavoro e in base ai registri di sistema viene eseguito, ma la definizione è piuttosto

*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh &>/dev/null

Questo reindirizza tutto l'output alla memoria più grande del tuo sistema, il "buco nero":/dev/null mangia tutto (ma non restituisce mai nulla). Il reindirizzamento di STDOUT e STDERR in questo modo ti priva di qualsiasi segnalazione di errore, quindi non sai mai che sono accaduti, per non parlare dei dettagli. Per il test, dovresti omettere &>/dev/null parte completamente. Anche se funziona, dovresti solo sopprimere l'output non necessario, altrimenti non saprai mai quando qualcosa va storto. Quindi è meglio omettere almeno la e commerciale, in modo che Cron possa segnalare eventuali errori che si verificano.

Correlati:il dock USB per HDD Seagate da 4 TB funziona solo con meno di 2,2 TB di dati?

Inoltre:una volta che l'output è stato reindirizzato (come nel tuo caso a /dev/null ), l'aggiunta di un altro reindirizzamento alla fine non produrrà alcun risultato, poiché tutto è già andato. Quindi devo modificare il consiglio di cui sopra da "aggiungi ... alla fine della tua voce crontab" a "sostituirlo nella tua voce crontab" 😉


Ubuntu
  1. Pianificare lo script Apt-get utilizzando Cron?

  2. Il mio Cron Job non funziona

  3. Problema Crontab:Cron Job non funziona quando si utilizza la percentuale

  4. Prova un cron job settimanale

  5. script user-data (cloud-init) non in esecuzione su EC2

Come impostare un Cron Job in Linux

Lavori Cron programmati

Lo script della shell non viene eseguito dopo averlo aggiunto come lavoro Crontab?

Come impostare il lavoro cron per eseguire uno script PHP in cPanel?

Che cos'è un Cron Job in Linux

Perché il mio cron job non mi invia email?