Следующее, казалось, работало над одним случаем, на котором я протестировал его, и можно просто отбросить имена каталогов как символьные ссылки в ~ / Закладки:
mkdir "$HOME/Bookmarks"
ln -s /tmp "$HOME/Bookmarks/testdir"
function ccd() { cd $(readlink "$HOME/Bookmarks/$1") ; }
ccd testdir && echo $PWD
# gives /tmp
Задания, отправленные at
демон отправит любой вывод Вам от stderr и stdout после завершения. Это может также быть настроено для отправки почты, даже если задание не имеет никакого вывода. Это также обладает преимуществом выполнения без терминала управления, таким образом, Вы не должны волноваться по поводу эффекта, что закрытие Вашего терминала будет иметь на задании.
пример:
echo "/opt/product/bin/job.sh data123"|at -m NOW
Когда это задание завершится, пользователь, который отправил, задание получит электронное письмо, и если будет вывод вообще, то Вы получите его. Можно изменить почтового получателя путем изменения LOGNAME
переменная среды.
at
имеет пакетный режим, где можно поставить задания в очередь для выполнения, когда система не занята. Это не очень хорошая система массового обслуживания, когда многочисленные пользователи конкурируют за ресурсы, но тем не менее, если Вы хотели выполнить задания с нею:
echo "/opt/product/bin/job.sh dataA"|batch
echo "/opt/product/bin/job.sh dataB"|batch
echo "/opt/product/bin/job.sh dataC"|batch
По умолчанию задания не запустятся, если системная нагрузка не будет находиться под 1.5, но то число загрузки может быть скорректировано (и с 24 ядрами я сказал бы, что Вы должны). Они могут работать параллельно, если они не ударят loadavg по пределу загрузки (1,5 значения по умолчанию снова), или если они индивидуально ударят loadavg более чем 1,5, то они будут работать в сериале.
Можно просмотреть очередь заданий с atq
, и удалите задания с atrm
Зависимости от ответа:
atd
демон ( ps -ef|grep atd
)atd
(не отклоненный /etc/at.deny
//etc/at.allow
конфигурации)sendmail
MTAБольшинство систем не имеет никакой проблемы с этими требованиями, но стоит проверить.
Да, существует
command; echo "Process done" | mail -s "Process done" mail@domain.tld
Где-s "текст" является предметом, эхо дает почте некоторый текст для отправки Вам.
mail
команда действительно требует, чтобы локальный MTA был настроен правильно. Это - легкое и простое решение.
– jordanm
10.11.2012, 22:57
mail
отправить Вам вывод команды: { command; echo Done; } | mail -s "subject" recipient@example.com
– glenn jackman
11.11.2012, 14:41
screen
или tmux
, но это могло бы быть раздражительно, чтобы иметь терминал, открытый где-нибудь в течение дней/недели без него. Решение с at
для задания управление также заботилось бы о той проблеме.
– Caleb
14.11.2012, 15:13
&
в конце команды, чтобы заставить это работать в задней земле. sleep 30 && echo "Process done" | mail -s "Process done" mail@domain.tld &
– Theo Kouzelis
26.08.2015, 12:02
nohup
для удаления связи с ними но Вы также теряете способность продолжить управлять им от оболочки. Это частично что tmux
для. Это отделяет рабочие процессы от Вашего активно связанного и просматриваемого терминального сеанса, все еще позволяя Вам обычно взаимодействовать с ними. Сигналы
– Caleb
26.08.2015, 12:20
Я рекомендовал бы установить сценарий Python для отправки электронного письма, они очень легки записать и настроить корректные почтовые серверы для любого сервиса, который Вы используете. Они выглядят примерно так:
#!/usr/bin/python
import smtplib
sender = 'from@fromdomain.com'
receivers = ['to@todomain.com']
message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
Subject: SMTP e-mail test
This is a test e-mail message.
"""
try:
smtpObj = smtplib.SMTP('localhost')
smtpObj.sendmail(sender, receivers, message)
print "Successfully sent email"
except SMTPException:
print "Error: unable to send email"
Используйте это в сочетании с оператором канала, предложенным в других ответах.
Другое отличное решение, которое я нашел к этой проблеме, использует Слабого соперника. Слабый соперник - "Слабый соперник помогает отправить уведомления в реальном времени Вашему Android и устройствам на iOS". Я устанавливаю простой сценарий, какой ultised легкий API для отправки сообщения в мой телефон, когда мои сборки сделаны.
curl -s \
-F "token=APP_TOKEN" \
-F "user=USER_KEY" \
-F "message=The build is done." \
https://api.pushover.net/1/messages.json
Можно также использовать trap
команда для отправки почты на выходе процесса, или в прерывании, зависании или при завершении процесса.Here является кодом, который необходимо поместить наверху сценария.
trap 'mail -s "Process done" mail@domain.tld' exit # It will mail on normal exit
trap 'mail -s "Process interrupted" mail@domain.tld' INT HUP# it will mail on interrupt or hangup of the process
Arun
У меня есть доморощенный сценарий , который работает на меня. Использование:
mail-after <your command>
Он отправит электронное письмо с содержательной информацией в теме и с выводом процесса в теле.
Инструкции по установке находятся на главной странице репо GitHub -- в настоящее время для всех скриптов создаётся сим-ссылка в ~/бине
.
Я написал process_watcher.py
process_watcher --pid 1234 --to me@gmail.com
В настоящее время тело сообщения электронной почты выглядит так:
PID 18851: /usr/lib/libreoffice/program/soffice.bin --writer --splash-pipe = 5
Начато: четверг, март. 10 18:33:37 Завершено: чт, 10 марта 18:34:26 (продолжительность 0:00:49)
Память (текущая / пиковая) - резидент: 155 280/155 304 КБ Виртуальный: 1,166 968 / 1,188,216 kB
[+] indicates the argument may be specified multiple times, for example:
process-watcher -p 1234 -p 4258 -c myapp -c "exec\d+" --to person1@domain.com --to person2@someplace.com
optional arguments:
-h, --help show this help message and exit
-p PID, --pid PID process ID(s) to watch [+]
-c COMMAND_PATTERN, --command COMMAND_PATTERN
watch all processes matching the command name. (RegEx pattern) [+]
-w, --watch-new watch for new processes that match --command. (run forever)
--to EMAIL_ADDRESS email address to send to [+]
-n, --notify send DBUS Desktop notification
-i SECONDS, --interval SECONDS
how often to check on processes. (default: 15.0 seconds)
-q, --quiet don't print anything to stdout
Создайте проблему с GitHub, если вам нужны какие-либо улучшения.
Возраст назад я создал этот псевдоним (в csh, теперь я использую его в tcsh):
alias shunt "(\! * | Mail -s 'Вывод: \! *' $ user)> & / dev / null & "
Для этого требуется, чтобы Mail
был установлен и работал в вашей системе, но имеет то преимущество, что ваша команда запускается точно так же, как и из командной строки (включая псевдонимы, расширения тильды и т. Д.) - когда вы запускаете задание, используя в
или cron
, оно выполняется в среде по умолчанию, которая может быть достаточно другой, чтобы привести к сбою вашего скрипта или выдаче необычного результата (меня укусило это из cron
много раз)
Suponiendo que su programa ya se está ejecutando, use bash+pgrep para verlo.
# Check that "pgrep $PROGRAM" returns the rid PID.
PROGRAM=foo
RECIPIENTS=you@yours.com
echo Watching $PROGRAM; while pgrep $PROGRAM &>/dev/null ; do sleep 1; echo -ne "."; done ; echo "$PROGRAM process done" | /bin/mail -s "$PROGRAM process done" $RECIPIENTS;