mtr 无法从 cron 运行

mtr 无法从 cron 运行

下面的脚本在从 CLI 运行时完美运行,但在从 cron 运行时失败并出现错误

"/usr/local/sbin/mtr: Failure to start mtr-packet: Invalid argument"

这是cronroot 自己的条目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,脚本就可以正常工作,因此它可以找到mtrmtr-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

我找到了完整的路径mtrmtr-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

谢谢

相关内容