我制作了一个脚本,它将作为 cron 任务运行,每隔 5 分钟执行一次。他的目标是使用预定义的模式读取每天创建的日志文件。它会创建一个 .flag 文件来跟踪已读取的文件,如果它与模式匹配,则会运行 .sh 脚本来重新启动服务。
我已经使用相同的脚本解决了有关错误行终止符的问题(如果这与解决方案相关)。
我的脚本:
#!/bin/bash
LAST_POS_FILE="last_position.flag"
PATTERN='ERROR [pt.gsoft.oasis.platform.plugins.mediaconverter.ejb.messages.MediaConverterMDB]'
LOG_FILE='/var/local/log/server.log'
if [ ! -f "$LAST_POS_FILE" ]; then
echo 0 > "$LAST_POS_FILE"
fi
LAST_POS=$(cat "$LAST_POS_FILE")
CURR_LOG=$(date+"%Y-%m-%d")
if [ "$LOG_FILE.$CURR_LOG" -nt "$LOG_FILE" ]; then
LOG_FILE="$LOG_FILE.$CURR_LOG"
fi
if [[ "$LOG_FILE" -nt "$LOG_FILE" ]]; then
LINE=$(grep -E "$PATTERN" "$LOG_FILE" | awk -F: '{print $1}')
if [ -n "$LINE" ]; then
if [ "$LINE" -gt "$LAST_POS" ]; then
echo "$LINE" > "$LAST_POS_FILE"
./teste.sh
fi
fi
fi
# end of file #
我的终端输出是
filipe@filipe-virtual-machine:~$ sudo ./restarScript.sh
sudo: ./restarScript.sh: command not found
郑重声明,我正在另一台机器上进行测试,因为我没有测试环境,所以目标机器正在运行 Red-Hat(如果需要考虑的话)。
我使用 ShellCheck 和 JDoodle 来获取更详细的错误描述。
Shellcheck 输出:
$ shellcheck myscript
No issues detected!
$
JDoodle 输出:
jdoodle.sh: line 2: $'\r': command not found
jdoodle.sh: line 4: $'\r': command not found
jdoodle.sh: line 6: $'\r': command not found
jdoodle.sh: line 8: $'\r': command not found
jdoodle.sh: line 35: syntax error: unexpected end of file
Command exited with non-zero status 2
我想
$'\r'
\ 行终止符错误是无关紧要的,因为它已经解决了,我只是有语法错误待处理
当您没有 bash 时会出现此错误。看起来只安装了 sh 或其他一些 shell。由于 bash 不存在,它会抛出错误 no command。 您可以将 shell 切换到
#!/bin/sh
(相应的命令)或安装 bash 并重试。