mtr は cron では実行できません。

mtr は cron では実行できません。

以下のスクリプトは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

ありがとう

おすすめ記事