![Crontab - ログに記録しませんか? どうすれば正しく実行できますか?](https://rvso.com/image/1126787/Crontab%20-%20%E3%83%AD%E3%82%B0%E3%81%AB%E8%A8%98%E9%8C%B2%E3%81%97%E3%81%BE%E3%81%9B%E3%82%93%E3%81%8B%3F%20%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E6%AD%A3%E3%81%97%E3%81%8F%E5%AE%9F%E8%A1%8C%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%81%8B%3F.png)
私は自分の問題の答えを探しましたが、正しい答えが見つかりませんでした。だから自分で試してみます。
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.selfcheck
。cronlog
* */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