我来了一个脚本来检查名称节点状态。当我手动运行时,namenode的状态写入文件,当我再次运行第二次尝试输出时,在旧文件中添加一个新行。但我计划在cron中每15分钟运行一次。但是cron作业会覆盖旧数据,我只能看到上次运行状态。如何通过cron添加新行?
#!/bin/bash
NOW=$(date +"%m-%d-%Y")
fname=active.$NOW.log
[ ! -f $fname ] && > /opt/hd/sh/bin/$fname
if [[ $(hdfs haadmin -ns ATcluster -getServiceState nn1) = *active* ]];
then
echo "`date +"%Y-%m-%d %H:%M:%S"` active NN1" >> /opt/hd/sh/bin/$fname
elif [[ $(hdfs haadmin -ns ATcluster -getServiceState nn2) = *active* ]];
then
echo "`date +"%Y-%m-%d %H:%M:%S"` active NN2" >> /opt/hd/sh/bin/$fname
else
echo "`date +"%Y-%m-%d %H:%M:%S"` stopped state" >> /opt/hd/sh/bin/failed.$NOW.log
fi
输出:
cat active.01-1
cat: active.01-1: No such file or directory
[root@hadmat01 bin]# cat active.01-11-2018.log
2018-01-11 06:00:04 active NN1 --> it should write nw output like below through cron job
[root@hadmat01 bin]# cat failed.01-11-2018.log
20180111 00:00:05 stopped state
20180111 00:15:05 stopped state
20180111 00:30:05 stopped state
20180111 00:45:05 stopped state
答案 0 :(得分:1)
你的问题在于此代码:
fname=active.$NOW.log
[ ! -f $fname ] && > /opt/hd/sh/bin/$fname
如果此作业从crontab开始 - 检查文件存在于/
开始。
我认为位置/active.01-11-2018.log不存在。
所以你把emty字符串放在文件/opt/hd/sh/bin/$fname
您必须为日志目标定义绝对路径,或在cd /opt/hd/sh/bin/
部分之前插入字符串if