我正在Prometheus上测试Pushgateway,每分钟都会用bash脚本和crontab触发的curl提供关于我的‘m服务的简单数据。
我有两个bash脚本。第一个是cpu_usage.sh,通过curl解析有关ps -aux命令的数据并将其发送到pushgateway:
#!/usr/bin/env bash
z=$(ps aux)
while read -r z
do
var=$var$(awk '{print "cpu_usage{process=\""$11"\", pid=\""$2"\", cpu=\""$3"\"}", $3z}');
done <<< "$z"
curl -X POST -H "Content-Type: text/plain" --data "$var
" http://localhost:9091/metrics/job/top/instance/machine这一次一切正常,我的crontab每分钟都将格式化的数据发送给我的推网关实例localhost:9091。
现在,我正试图发送service --status-all命令的解析结果,其中包含一个名为services_list.sh的脚本,与处理cpu_usage.sh脚本的方式完全相同:
#!/usr/bin/env bash
y=$(service --status-all)
while read -r y
do
varx=$varx$(awk '{print "services_list{service=\""$y"\"}", 1}');
done <<< "$y"
curl -X POST -H "Content-Type: text/plain" --data "$varx
" http://localhost:9091/metrics/job/top/instance/machine当手动执行两个脚本(如./cpu_usage.sh和./services_list.sh )时,一切都很好,Pushgateway正在成功地从这两个脚本中检索数据。
但是,当我通过CRON传递这些调用时,只有cpu_usage.sh将数据发送到pushgateway ( Pushgateway上最后一次推services_list方法的时间戳保持不变)。
我的crontab语法如下:* * * * * cd /path/ && ./script.sh
脚本在777 / root:root中,crontab总是被编辑为root。我尝试在一个bash文件中连接这两个标记,不管我将它们放在哪个顺序,对services_list方法的curl调用都是从未进行过的(但是在cpu_usage方法上一切都很好)。
我有点迷路了,因为这两个脚本非常相似,对services_list.sh的手动调用也很好。有什么想法吗?谢谢。
在Debian 9上运行Pushgateway 0.10。
发布于 2019-10-14 09:51:20
命令service不能从crontab调用。当从cron (如service )调用它时,我必须提供它的完整路径。
在这种情况下,使用y=$(/usr/sbin/service --status-all)代替y=$(service --status-all)在y=$(service --status-all)脚本中运行一切都很好。
https://stackoverflow.com/questions/58373227
复制相似问题