아래 스크립트는 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
루트 사용자 계정에 설정된 상대 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
감사해요