log_file="${log_dir}/$(date +%Y%m%d%H%M).log" function monitor(){ #set -x #if [ -e `/var/log/program_monitor/*.log` ];then if [ $(find /var/log/program_monitor/ -maxdepth 1 -name "*.log" | wc -l) -gt 0 ]; then echo "1" latest_log=$(ls -t /var/log/program_monitor/*.log | head -1) echo "2" echo "$latest_log" date_str=$(echo $latest_log | cut -d'/' -f5 | grep -oE '[0-9]{8}') echo "3" echo "$date_str" latest_time=$(date +%Y%m%d) echo "4" echo "$latest_time" if [ "date_str" == "latest_time" ]; then echo "5" echo ---------$(date)---------- >> $log_file else touch ${log_fiile} echo "6" fi else touch ${log_file} echo "7" fi } 出现touch: missing file operand这个是?
时间: 2024-02-10 17:30:07 浏览: 69
这个错误提示说明在touch命令中没有指定文件名,因此touch无法创建文件。在monitor函数中,如果找到了log文件,则会执行touch命令,但是touch命令中的文件名变量$log_file没有被正确设置。这可能是因为$log_file变量在if语句块中定义的,而在else语句块中也使用了这个变量,但是没有被正确设置。建议检查$log_file变量的赋值和使用,确保在touch命令中正确指定了文件名。
相关问题
dest_dir="/var/log/program_monitor" dest_file="$(date +%Y%m%d%H%M).log" log_file="${dest_dir}/$(date +%Y%m%d%H%M).log" mkdir -p "${dest_dir}" function monitor() { echo $dest_file if [ "$(find $dest_dir -maxdepth 1 -name "$dest_file")" = "" ]; then我想知道这样写是不是是不是放到循环里面就会自动根据时间产生日记的文件
是的,如果将这段代码放到循环中,每次执行函数时,都会根据当前日期和时间生成一个新的日志文件名,如果目标目录下不存在该文件,则创建该文件并写入日志信息。因此,如果你需要定期记录日志,可以将这段代码放到循环中,定时调用函数即可。但是,需要注意的是,如果日志文件过多,可能会占用过多的磁盘空间,导致磁盘空间不足的问题,因此需要定期清理日志文件。
将判断条件修改为 -e "/var/log/program_monitor/*.log"。我就是这样写的
非常抱歉,我看错了你的代码,你的判断条件已经是 `-e "/var/log/program_monitor/*.log"` 了。
那么,出现问题的原因可能是由于目录中存在多个以 .log 结尾的文件,导致 ls 命令返回的文件名不是你想要的。你可以在执行 ls 命令时加上参数 -1,强制只列出一个文件名,这样就可以避免这个问题了。
修改后的代码如下:
```
#!/bin/bash
# 定义变量
log_dir="/var/log/program_monitor"
# 创建日志目录
mkdir -p "${log_dir}"
log_file="${log_dir}/$(date +%Y%m%d%H%M).log"
function monitor(){
if [ -e "/var/log/program_monitor/*.log" ];then
echo "1"
latest_log=$(ls -1t /var/log/program_monitor/*.log | head -1)
echo "2"
date_str=$(echo $latest_log | cut -d'/' -f5 | grep -oE '[0-9]{8}')
echo "3"
latest_time=$(date -d "$date_str" +%s)
current_time=$(date +%s)
echo "4"
if [ "$date_str" -eq "$latest_time" ]; then
echo "---------$(date)----------" >> $log_file
else
touch ${log_file}
fi
else
touch ${log_file}
echo "5"
fi
}
monitor
```
这样修改后,再次运行脚本,就可以避免目录中存在多个以 .log 结尾的文件所导致的问题了。
阅读全文