2016-02-06 3 views
-1

Я пропустил простой скрипт, чтобы проверить, существуют ли какие-либо файлы (завершены .txt) в dirctoey старше 6 часов после проверки отправки электронной почты. Сценарий не работает хорошо, и, как и ожидалось, я спрашиваю вас, есть ли более простой и эффективный способ сделать это? В принципе, просто нужно проверить, существует ли файл с файлом .txt и старше 6 часов, если да, то нужно отправить электронное письмо.bash script проверить, существует ли файл и отправлено информационное сообщение

Это мой сценарий

#!/bin/bash 

DATE=`date +%Y.%m.%d-%H.%M` 
HOSTNAME='host' 
BASEDIR=`/usr/local/se/work/jobs/` 
LOGFILE=`/usr/local/se/work/jobs/logs/jobs.log` 
VERTEILER="anyemail" 
# Functions 
# 
# function check if the jobs are exists 

'find ${BASEDIR} -name "*.txt" -nmin +354' 2>$1 >>$LOGFILE 

#function mail 
cat << EOF | mailx -s "Example ${HOSTNAME} jobs `date +%Y.%m.%d-%H.%M`" -a ${LOGFILE} ${VERTEILER} 

Hi, 

Please check the Jobs. 

Details : 

`ls -ltr /usr/local/se/work/jobs/` 

------------  END  ---------------------------------------- 
. 
Thank you 
+0

EOF не является конечным файлом, а маркером, который вам нужно поставить на линию после 'Спасибо'. Пожалуйста, замените backtics на '$ (ls -ltr something)', что является предпочтительным способом вызова подпроцесса. Удалите одинарные кавычки с помощью find. –

ответ

0

Вы даже попробовать запустить этот сценарий?

Углубленный акцент (`) в BASEDIR и LOGFILE означает, что оболочка попытается оценить их как команды, которые не работают. Вам не нужно вообще кавычки строк в сценариях оболочки, хотя это можно считать хорошей практикой использовать двойные кавычки (")

HOSTNAME=host 
BASEDIR=/usr/local/se/work/jobs 
LOGFILE=${LOGFILE}/logs/jobs.log 
VERTEILER=anyemail 

Переключатель для поиска файлов по минутам в mmin называется и не nmin. - еще раз, что должно было дать вам ошибку. И математика не так, если вы хотите 6 часов, то это 6 * 60 = 360 минут.

find ${BASEDIR} -name *.txt -mmin +360 

вы перенаправляет STDERR к первому входному параметру. (2>$1) есть вы ожидаете выхода ошибки из этой команды, не могли бы вы объяснить, что здесь происходит?

И затем вы добавляете это к LOGFILE, который находится в каталоге, который может не существовать. mkdir -p - хороший выбор для создания папок в сценариях, потому что он создает родительские каталоги при необходимости и не будет жаловаться, если папка уже существует. Так что-то вдоль линий

mkdir -p /usr/local/se/work/jobs/logs 
0

Перенаправление STDERR на STDOUT использование 2>&1, вы делаете это неправильно с 2>$1

Кроме того, правильный параметр находки -mmin не -nmin как у вас есть в вашем коде ,

Дальше больше у вас есть синтаксические ошибки, как здесь:

BASEDIR=`/usr/local/se/work/jobs/` 
LOGFILE=`/usr/local/se/work/jobs/logs/jobs.log` 

Что вы имеете в виду тип является:

BASEDIR='/usr/local/se/work/jobs/' 
LOGFILE='/usr/local/se/work/jobs/logs/jobs.log' 

При использовании backticksbash пытается выполнить COMMAND, вы используете его право путь здесь:

DATE=`date +%Y.%m.%d-%H.%M` 

Вы также не закрываете heredoc <<EOF, вам нужно EOF в последней строке скрипта.

И потерять '', окружающий команду find.

Следует обратить внимание на то, что говорит баш, он должен вызывать массу ошибок, попробуйте запустить скрипт вручную, чтобы просмотреть их, если вы используете это через cron.

Смежные вопросы