Используйте файловую систему FUSE, которая позволяет Вам просматривать архивы как каталоги, такие как AVFS. Использовать cp
извлечь файлы к каталогу по Вашему выбору.
mountavfs
cp -Rp ~/.avfs/tmp/omeka-1.5.1.zip\#/omeka-1.5.1 omeka
Так как мы предполагаем, что существует единственный каталог верхнего уровня в архиве, можно сократить это к
cp -Rp ~/.avfs/tmp/omeka-1.5.1.zip\#/* omeka
Поскольку at
не выполняет команды в контексте Вашего зарегистрированного сеанса пользователя. Идея состоит в том, что можно запланировать команду для выполнения в произвольный момент времени, затем выйти из системы, и система будет заботиться о выполнении команды в требуемое время.
Обратите внимание что страница руководства at(1)
конкретно говорит (мой акцент):
Пользователю отправят по почте стандартную погрешность и стандартный вывод от его команд, если таковые имеются. Почта будет отправлена с помощью команды/usr/sbin/sendmail.
Таким образом, необходимо проверять шпульку местной почты или, приводя к сбою это, локальные системные почтовые журналы. $USER/var/spool/mail/является, вероятно, хорошим местом для запуска.
Также обратите внимание, что "Запущенный" и "Законченный" происходят из внешнего сценария и в, и себя не имеют никакого отношения at
вообще. Вы могли вынуть их или at
вызов и Вы получите по существу тот же результат.
Поскольку @MichaelKjörling объяснил это любой вывод, это производится Вашим at
задание будет получено и отправлено Вам по электронной почте. Если у Вас нет рабочего MTA - Агент Передачи почты на Вашем поле затем, электронная почта может быть в неопределенности, и Вы не будете знать это at
даже пытается сделать это.
MTA, программа такой как sendmail
или postfix
это может "поставить" электронную почту соответствующему месту назначения. В этом случае это собирается поставить его почтовой очереди (файл в соответствии с каталогом /var/spool/mail
) в Вашей локальной системе. У каждого пользователя в системе может быть очередь в этом каталоге.
В моей системе Fedora, если я запускаю sendmail
затем доставка местной почты может произойти. У меня обычно есть он прочь все же.
$ sudo service start sendmail
Теперь мы видим что моя почтовая очередь для моей учетной записи пользователя saml
пусто:
$ ll /var/spool/mail/|grep saml
-rw-rw----. 1 saml mail 0 Jul 12 19:33 saml
Таким образом, теперь мы работаем at
задание:
$ at now + 1 minutes <<EOF
echo "Running"
EOF
job 96 at Fri Jul 12 19:38:00 2013
Мы видим, что задание ожидает для выполнения с atq
:
$ atq
96 Fri Jul 12 19:38:00 2013 a saml
При выполнении его снова после нескольких минут мы видим что at
задание завершено:
$ atq
$
Кстати, с моим выполнением MTA я теперь получаю это сообщение в своем терминале:
У Вас есть новая почта в/var/spool/mail/saml
Поэтому давайте проверим:
$ ll /var/spool/mail/|grep saml
-rw-rw----. 1 saml mail 651 Jul 12 19:38 saml
Да у нас есть почта, поэтому давайте проверим его использование mutt
:
$ mutt -f /var/spool/mail/saml
У нас есть это в "ящике входящих сообщений" нашей почтовой очереди:
Давайте проверим эту электронную почту:
И это работало.
Вышеупомянутые ответы являются стандартом / "правильный" способ сделать это.
Другой подход это более просто с большего количества точки зрения "конечного пользователя", должен иметь любую запланированную или фоновую задачу, пишут ее вывод в файл "журнала". Файл может быть где угодно в Вашей системе, но если задача работает как корень (от cron
, и т.д.), затем где-нибудь под /var/log
хорошее место состоит в том, чтобы поместить его.
Я создал /var/log/maint
каталог и сделанный этим читаемый всеми и у меня есть читаемый файл под названным "резервным копированием", где я регистрирую вывод из своих резервных сценариев.
Я сделал свой собственный каталог, таким образом, мои файлы не становятся смешанными в с вещами, сгенерированными системой.
Помещать материал там (в ударе):
BACKUP="/var/log/maint/backup"
echo "my message" >> "${BACKUP}"
>>
заставляет сообщения быть добавленными в файл вместо того, чтобы перезаписать его каждый раз.
Если мой сценарий имеет большой вывод, я использую сценарий или функцию для вывода, таким образом, все сделано то же. Ниже мой ток (версия излишества): (ПОДРОБНЫЙ материал там для того, когда я запускаю скрипт от терминала и хочу видеть то, что продолжается для отладки целей.)
#!/bin/bash
## backup_logger
## backup system logging module
## Copyleft 01/20/2013 JPmicrosystems
## Usage is ${SCRIPT_NAME} [-v] [<caller> <log message text>]
## If present, -v says log to console as well as to the log file
## <caller> is the name of the calling script
## If <caller> <log message text> is not present, write a blank line to the log
## Must be placed in path, like ~/bin
## If log is owned by root or another user, then this must run as root ...
## If not, it just aborts
##source "/home/bigbird/bin/bash_trace" ## debug
SCRIPT_NAME="$(basename $0)"
USAGE="Usage is ${SCRIPT_NAME} [-v] [<caller> <log message text>]"
SYSLOGDIR='/var/log/maint'
SYSLOGFILE="${SYSLOGDIR}/backup.log"
LOGGING=1
VERBOSE=0
if [ "${1}" == "-v" ]
then
VERBOSE=1
shift
fi
##LOGGING=0 ## debug
##VERBOSE=1 ## debug
## Only zero or two parameters allowed - <caller> <log message text>
RC=0
if [ "$#" -eq 1 ] || [ "$#" -gt 2 ]
then
echo "${USAGE}"
RC=1
else
if [ ! -w "${SYSLOGFILE}" ]
then
touch "${SYSLOGFILE}"
if [ $? -ne 0 ]
then
echo -e "$(date) ${1} ${2}"
echo "${SCRIPT_NAME} Can't write to log file [${SYSLOGFILE}]"
RC=1
exit ${RC}
fi
fi
if [ -n "${1}" ]
then
(( LOGGING )) && echo -e "$(date) ${1} ${2}" >> "${SYSLOGFILE}"
(( VERBOSE )) && echo -e "$(date) ${1} ${2}"
else
(( LOGGING )) && echo "" >> "${SYSLOGFILE}"
(( VERBOSE )) && echo ""
fi
fi
exit $RC
Править: Упрощенный at
пример, который пишет в пользовательский файл
Не использовали это в навсегда, таким образом, я понял это с несколькими простыми сценариями.
Первый сценарий просто планирует использование события at
. Сама команда могла просто быть введена в терминал, но я ленив - особенно, когда я должен сделать это многократно при тестировании ее, не играя с историей команд.
#!/bin/bash
## mytest_at_run
## Schedule a script to run in the immediate future
echo "/home/bigbird/bin/mytest_at_script" | at 00:56
Второй сценарий является тем, который, как планируют, будет работать
#!/bin/bash
## mytest_at_script
## The script to be run later
echo "$(date) - is when this ran" >> /home/bigbird/log/at.log
Я создал оба сценария в текстовом редакторе, сохранил их и затем сделал их каждым исполняемым использованием chmod 700 script-file-name
. Я поместил их обоих в мой $HOME/bin
каталог для удобства, но они могли быть где угодно моим пользователем, имеет полный доступ. Я использую 700
для любого сценария это только для тестирования, но в системе отдельного пользователя, это могло точно также быть 755
.
Мне уже назвали каталог /home/bigbird/log
сохранить вывод от mytest_at_script
. Это может также быть где угодно Вашим пользователем, имеет полный доступ. Просто удостоверьтесь, что это существует перед выполнениями сценария, или имейте сценарий, создают его.
Для выполнения его я просто удостоверился время для at
команда в mytest_at_run
был немного в будущем и затем выполнил его от терминала. Я затем ожидал, пока это не выполнило и исследовало содержание $HOME/log/at.log
.
bigbird@sananda:~/bin$ cat ~/log/at.log
Fri Sep 14 00:52:18 EDT 2018 - is when this ran
Fri Sep 14 00:56:00 EDT 2018 - is when this ran
bigbird@sananda:~/bin$
Несколько примечаний:
Даже при том, что я работаю at
от моего пользователя это не знает мою среду, такую как мой PATH
и мой корневой каталог, таким образом, я не принимаю это. Я использую полные пути как, я был бы для любого cron
задание. И если я когда-нибудь хочу сделать это a cron
задание, я не должен буду изменять ничего только, чтобы заставить его работать.
Я использовал >>
в mytest_at_script
добавлять вывод к файлу журнала вместо >
который заменил бы его на каждом выполнении. Используйте, какой бы ни каждый удовлетворяет Вашему приложению лучше всего.
Я использую Debian 8.1 (jessie)
Вы можете получить вывод at на терминал, используя tty.
$ tty
/dev/pts/1
$ at now + 1 min
warning: commands will be executed using /bin/sh
at> echo 'ZZZZZ' > /dev/pts/1
at> <EOT>
Через минуту "ZZZZZ" появится в вашем терминале ...