Crontab - ログに記録しませんか? どうすれば正しく実行できますか?

Crontab - ログに記録しませんか? どうすれば正しく実行できますか?

私は自分の問題の答えを探しましたが、正しい答えが見つかりませんでした。だから自分で試してみます。

Ubuntu サーバーを入手し、TeamSpeak3 サーバーを作成しようとしています - ログ機能を使用してファイルを確認します。このスクリプトは、cronjob によって 1 時間ごとに自動的に開始される必要があります。

私のチェックスクリプト (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

私のcrontabエントリは次のようになります:

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

この crontab はロード中ですが、「cronlog」ファイルに出力がありません。空です。また、「mylog.selfcheck」にも出力がありません。ただし、スクリプト (selfcheck.sh) を手動で実行すると、「mylog.selfchek」に出力があります。

言葉が下手ですみません...この文章は分かりますよね...

誰かが私を助けてくれることを願っています。

答え1

cron を設定すると、*/1 * * * *cron は 1 分ごとに実行されます。cron を* */1 * * *1 時間ごとに実行するように設定します。

編集後、cronを再起動します

sudo service cron restart

cronがどのように動作するかを確認するには

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

ご存知のとおり、ログを確認することができます

less /var/log/syslog | grep cron

編集1

あなたのコメントに基づいて、cron が機能します。また、スクリプトを実行すると、スクリプトで定義されたログ ファイルに出力されるとも言っていますLOGFILE='/home/teamspeak/s01/mylog.selfcheck'。わかりました。

mylog.selfcheckから同じコンテンツを取得しますcronlog。次に、既に設定したように、スクリプトを実行するようにcronを設定しselfchek.sh、cronに2番目のコマンドを追加して、からにコンテンツを配置しますmylog.selfcheckcronlog

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

最終的なcronコード

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

関連情報