2015-04-22 3 views
0

Я использую Linux. Я хочу, чтобы компьютер отправил мне электронное письмо по окончании программы, используя mutt (школа не позволяет нам использовать mail). Я пробовал mutt, и он отлично работает.Как использовать mutt для отправки уведомлений, когда программа завершена

Я использую следующий скрипт, чтобы запустить программу

cd /home/program/K_10 && nohup Rscript program_1.R> program_1_out.txt;

Как я могу сделать это, чтобы отправить мне письмо, когда программа завершается. Письмо должно содержать The job /home/program/K_10/program_1.R is finished. Кроме того, если это возможно, вы можете помочь мне приложить /home/program/K_10/program_1.txt, который является результатом program_1.R? Я совершенно новый об Linux.

+0

Способ отправки почты обычно с помощью 'mail' команды. Вы говорите, что вам не разрешено использовать команду 'mail', но вы все равно хотите отправлять почту? (Mutt является MUA и не доставляет почту.) –

+0

@GregHewgill Вы правы. ИТ-ребята сказали, что я могу использовать только «mutt». –

+0

@GregHewgill Я думаю, 'mutt' может отправить почту. –

ответ

0

Все, что вам нужно что-то вроде этого:

cd /home/program/K_10 && nohup Rscript program_1.R> program_1_out.txt; 
echo "The job /home/program/K_10/program_1.R is finished" |mutt "[email protected]" -s "Your job" 

, то есть в сценарии первого выполнения задания, а затем (в последовательности) отправить почту на себя. Команды echo вводят в mutt, который использует его как содержимое почты. Опция -s устанавливает вопрос почты.

приятнее способ сделать это было бы поставить суть команд в сценарий, что-то вроде этого:

#!/bin/sh 
cd $(dirname $1) && nohup Rscript $(basename $1) > $(basename $1 .R)_out.txt; 
echo "The job $1 is finished" |mutt "[email protected]" -s "Your job" 

и (называя этот файл run-job), вызовите его

run-job /home/program/K_10/program_1.R 

разбив его немного:

  • run-job назван так, чтобы намекнуть на функцию сценария. Имена сценариев не имеют условного соглашения (это зависит от разработчика). Некоторые используют суффикс ".sh" для имен, чтобы сделать их тип более очевидным, но это не является существенным.
  • Суффикс ".R" является еще одним соглашением об именах, но может потребоваться Rscript. В любом случае, это часть существующего имени файла.
  • - параметр (или аргумент), данный сценарию. Более полный скрипт может проверить (a), если параметр присутствует, и (b), если параметр соответствует существующему файлу, но эти шаги опущены, чтобы сохранить его простым.
  • В $(dirname $1) возвращается /home/program/K_10 и
  • $(basename $1 .R) принимает, что /home/program/K_10/program_1.R и возвращает program_1.
  • Для этого простого сценария можно взять части имени пути и использовать их для создания более общего сценария, чем использование только буквенных команд.

nohup неловко здесь; Я бы переместил его из сценария. Затем вы можете напрямую контролировать способ запуска скрипта, например.,

nohup run-job /home/program/K_10/program_1.R & 

При создании сценария, таких как run-job, вы должны помнить, чтобы сделать это:

  • сделать его исполняемым, например, chmod u+x run-job
  • либо поместить скрипт в директорию на вашем $PATH (например, $HOME/bin на многих системах) или позаботиться о его вызове, используя свой путь. Например, если он находится в текущем каталоге, вы можете просто сделать

    nohup ./run-job /home/program/K_10/program_1.R &

  • Для изоляции проблем (или моя опечатка, или какая-то другая причина), оболочка обеспечивает след функцию (фактический команды будут напечатаны по мере их запуска). Чтобы включить трассировку, изменить первую строку сценария

    #!/bin/sh -x

+0

сказано, что 'run-job: Command not found', –

+0

Я поместил' run-job.sh' в папку, аналогичную 'program_1.R '.Но это все еще не работает.Может быть, компьютер кампуса не позволяет мне редактировать файл bash. –

+0

Но что делает скрипт * do *? (Теперь нужно идти). –

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

  • Нет связанных вопросов^_^