O problema é ; || em
LAST_LOG=$last_log awk 'index($0, ENVIRON["LAST_LOG"]) {y=1;next};y' $log_file ; || cat $log_file
O ; encerra a invocação de awk e o próximo comando começa com || , que é um erro de sintaxe.
O que você deseja fazer é verificar se y não é 1 ao final da análise do arquivo de log e, nesse caso, awk retornará um status de saída diferente de zero:
LAST_LOG="$last_log" awk '
index($0, ENVIRON["LAST_LOG"]) { y = 1; next }
y { print }
END { exit !y }' <"$log_file" || cat <"$log_file"
Sem o exit explícito, você só obterá um status de saída diferente de zero em awk se algum tipo de erro ocorrer.