Crontab - nicht protokollieren? Wie mache ich das richtig?

Crontab - nicht protokollieren? Wie mache ich das richtig?

Ich habe nach einer Antwort auf mein Problem gesucht, aber nicht die richtige gefunden. Also versuche ich es selbst.

Ich habe einen Ubuntu-Server und versuche, einen TeamSpeak3-Server zu erstellen - Datei mit Logging-Funktion prüfen. Dieses Skript sollte stündlich automatisch durch einen Cronjob gestartet werden.

Mein Check-Skript (selfcheck.sh):

#!/bin/bash

cd /home/teamspeak/s01
LOGFILE='/home/teamspeak/s01/mylog.selfcheck'

function logg(){
        echo -n `date +\%d.\%m.\%Y` `date +\%H:\%M:\%S` >>$LOGFILE
        echo " | `basename $0` $1" >>$LOGFILE
}


#COMMANDLINE_PARAMETERS="${1}" #add any command line parameters you want to pass here
DIR=/home/teamspeak/s01/
USER=teamspeak

logg "### GESTARTET ###"

if [ -e ts3server.pid ]; then
    if ( kill -0 $(cat ts3server.pid) 2> /dev/null ); then
        echo ""
        echo "      ###################"
        echo "      #Server is running#"
        echo "      ###################"
        echo ""
        status=1

        echo "`date +\%d.\%m.\%Y` `date +\%H:\%M:\%S` | Server is running" >>$LOGFILE

    else
        echo ""
        echo "      ###########################"
        echo "      #Server seems to have died#"
        echo "      ###########################"
        echo ""
        status=2

        echo "`date +\%d.\%m.\%Y` `date +\%H:\%M:\%S` | Server seems to have died" >>$LOGFILE

    fi
else
    echo ""
    echo "      ##########################"
    echo "      #The server isn't running#"
    echo "      ##########################"
    echo ""
    status=3

    echo "`date +\%d.\%m.\%Y` `date +\%H:\%M:\%S` | The server isn't running" >>$LOGFILE

fi

if [ $status = "2" ]; then
    echo ""
    echo "      ##############"
    echo "      #Status ist "$status"#"
    echo "`date +\%d.\%m.\%Y` `date +\%H:\%M:\%S` | Status ist "$status >>LOGFILE
    echo "      ###RE-START###"
    echo "`date +\%d.\%m.\%Y` `date +\%H:\%M:\%S` | RE-START" >>LOGFILE
    echo "      ##############"
    echo ""
    echo ""
    echo "      ######################"
    echo "      #Stopping the Server!#"
    echo "`date +\%d.\%m.\%Y` `date +\%H:\%M:\%S` | Stopping the Server!" >>LOGFILE
    echo "      ######################"
    echo ""
    ./ts3server_startscript.sh stop inifile=ts3server.ini
    echo ""
    echo "      ######################"
    echo "      #Starting the Server!#"
    echo "`date +\%d.\%m.\%Y` `date +\%H:\%M:\%S` | Starting the Server!" >>LOGFILE
    echo "      ######################"
    echo ""
    ./ts3server_startscript.sh start inifile=ts3server.ini


fi

logg "###  BEENDET  ###"

exit 0

Nun mein Crontab-Eintrag:

SHELL=/bin/bash
PATH=/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11
# m h  dom mon dow   command
  */1 *   *   *   *    /home/teamspeak/s01/selfchek.sh >> /home/teamspeak/s01/cronlog

Diese Crontab wird geladen, aber es gibt keine Ausgabe in der Datei „cronlog“. Sie ist leer. Auch gibt es keine Ausgabe in meinem „mylog.selfcheck“. Aber wenn ich das Skript (selfcheck.sh) manuell ausführe, gibt es eine Ausgabe in „mylog.selfchek“.

Es tut mir leid, dass ich mich so ausdrücke... Sie kennen diesen Satz...

Ich hoffe, dass mir jemand helfen kann.

Antwort1

Wenn Sie „cron“ festlegen, */1 * * * *wird „cron“ jede Minute ausgeführt. Stellen Sie „cron“ so ein, * */1 * * *dass es stündlich ausgeführt wird.

Starten Sie cron nach der Bearbeitung neu

sudo service cron restart

So überprüfen Sie, wie Cron ausgeführt wird

crontab -l | grep -v '^#' | cut -f 6- -d ' ' | while read CMD; do eval $CMD; done

Wie Sie wissen, können Sie das Protokoll überprüfen

less /var/log/syslog | grep cron

Bearbeiten 1

Basierend auf Ihrem Kommentar funktioniert Cron. Sie sagen auch, wenn Sie ein Skript ausführen, erhalten Sie eine Ausgabe in einer definierten Protokolldatei LOGFILE='/home/teamspeak/s01/mylog.selfcheck'im Skript. Ok.

Sie möchten den gleichen Inhalt von mylog.selfcheckin cronlog. Dann setzen Sie cron, wie Sie es bereits tun, um das Skript auszuführen selfchek.shund fügen Sie einen zweiten Befehl in cron hinzu, um den Inhalt von mylog.selfcheckin zu setzencronlog

 * */1 * * * cat /home/teamspeak/s01/mylog.selfcheck >> /home/teamspeak/s01/cronlog

Endgültiger Cron-Code

SHELL=/bin/bash
PATH=/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11
# m h  dom mon dow   command
  * */1 * * *    /home/teamspeak/s01/selfchek.sh
  * */1 * * *    cat /home/teamspeak/s01/mylog.selfcheck >> /home/teamspeak/s01/cronlog

verwandte Informationen