以下のスクリプトはCLIで実行すると完全に実行されますが、cronで実行するとエラーで失敗します。
"/usr/local/sbin/mtr: Failure to start mtr-packet: Invalid argument"
以下はcron
ルート自身のエントリですcrontab
。
* * * * * /root/trace_to_fpp.sh >/dev/null 2>&1
最初は権限の問題だと思いましたが、エラーが続きません。以下は使用中のスクリプトです。
#! /bin/bash
DIR=/var/log/traces/FPP/$(date +%Y-%m-%d)/$(date +"%H")/
DIR_FILE=$DIR$(date +"%M")
mkdir -p $DIR
/usr/local/sbin/mtr -o "L SRD NBAW JMXI" --report-wide --report-cycles 5 --no-dns --aslookup 1.1.1.1 > $DIR_FILE
/usr/local/sbin/mtr -o "L SRD NBAW JMXI" --report-wide --report-cycles 5 --aslookup 1.1.1.1 >> $DIR_FILE
重要な場合はCentOS 6にあります。
ベストアンサー1
最初はOPと同じエラーが発生しました。
さらなる調査を通じてPATHが定義されていmtr
ますmtr-packet
。
私はこれをテストしました:CentOS Linux release 8.2.2004 (Core)
cronは別のパスを使用しているようです。
[root@graylog ~]# crontab -l |grep PATH
* * * * * /bin/echo $PATH >> /var/log/cron.log
[root@graylog ~]# tail -n1 /var/log/cron.log
/usr/bin:/bin
スクリプトで新しいパスを定義することでこの問題を解決できます。以下は、次の場所にあるスクリプトです/etc/mtr-background.sh
。
#!/bin/bash
export PATH="$PATH:/usr/sbin/"
DIR=/var/log/traces/$(/usr/bin/date +%Y-%m-%d)/$(/usr/bin/date +"%H")/
DIR_FILE=$DIR$(/usr/bin/date +"%M")
mkdir -p $DIR
/usr/sbin/mtr -o "L SRD NBAW JMXI" -w -e -c 60 -4 1.1.1.1 >> $DIR_FILE
rootユーザーアカウントに設定されている相対crontabエントリは次のとおりです。
* * * * * /etc/mtr-background.sh >> /var/log/cron.log
フルパスが見つかりmtr
、次のようにmtr-packet
使用しましたwhereis
。
[root@graylog ~]# whereis mtr; whereis mtr-packet
mtr: /usr/sbin/mtr /usr/share/man/man8/mtr.8.gz
mtr-packet: /usr/sbin/mtr-packet /usr/share/man/man8/mtr-packet.8.gz
ありがとう