【发布时间】:2016-03-15 03:12:45
【问题描述】:
我尝试使用以下命令每 5 分钟重定向一次特定文件中的 TOP 命令输出。
top -b -n 1 > /var/tmp/TOP_USAGE.csv.$(date +"%I-%M-%p_%d-%m-%Y")
-rw-r--r-- 1 root root 0 Dec 9 17:20 TOP_USAGE.csv.05-20-PM_09-12-2015
-rw-r--r-- 1 root root 0 Dec 9 17:25 TOP_USAGE.csv.05-25-PM_09-12-2015
-rw-r--r-- 1 root root 0 Dec 9 17:30 TOP_USAGE.csv.05-30-PM_09-12-2015
-rw-r--r-- 1 root root 0 Dec 9 17:35 TOP_USAGE.csv.05-35-PM_09-12-2015
因此我为此制作了一个非常小的(1 行)shell 脚本,这样我就可以通过 cronjob 每 5 分钟运行一次。
问题是当我手动运行此脚本时,我可以看到文件中的输出,但是当此脚本自动运行时,文件每 5 分钟生成一次,但没有数据(又名文件为空)
谁能帮我解决这个问题?
我现在修改了脚本,还是一样。
#!/bin/sh
PATH=$(/usr/bin/getconf PATH)
/usr/bin/top -b -n 1 > /var/tmp/TOP_USAGE.csv.$(date +"%I-%M-%p_%d-%m-%Y")
【问题讨论】:
-
该命令对我有效,无需更改。所以问题一定是你如何定期触发命令。我假设您为此使用cron作业?如果是这样,请注意
PATH环境变量,以便进程可以实际找到这两个命令(top和date)。或者干脆使用绝对路径。 -
@arkascha 对不起..我不太清楚你的回答..你能帮我理解一下吗。您能告诉我您希望我在命令中做哪些确切的更改吗?
-
在大多数 Linux 中,
top是/usr/bin/top,date是/bin/date。您的默认PATH可能在未设置时具有/bin,但没有/usr/bin。在 cron 中指定/usr/bin/top -b -n 1 > /var/tmp/TOP_USAGE.csv.$(date +"%I-%M-%p_%d-%m-%Y")或将stderr重定向到文件以查看错误消息。在大多数情况下,错误消息在未重定向时会通过电子邮件发送给 cron 作业的所有者。 -
您是否将
stderr重定向到文件?错误信息是什么? -
1.您仍然没有指定
date命令的路径。我建议你这样做是为了安全起见。明确设置PATH变量也已过时。 2. 请也发布您的确切 cron 作业定义,所以整个 crontab 最简单。里面可能会有一些惊喜。 3. 尝试用简单的echo "hi there"代替top命令进行测试。那样有用吗? 4. 您应该遵循@alvits 提示并重定向命令的stderr输出:`/usr/bin/top -b -n 1 2>&1 > /var/tmp/TOP_USAGE.csv.$(date +" %I-%M-%p_%d-%m-%Y"),再次,只是为了临时测试。