(Название проекта: \ s + [AZ]: (?: \\ w +) +. [a-zA-Z] + \ s + J [0-9] {7}) (? =:)
Это будет работать для вас.
Добавление (?: \\ w +) +. [a-zA-Z] + будет более ограничительным, а не. *
Запустите сценарий оболочки, который устанавливает среду перед запуском команды.
Всегда.
# @(#)$Id: crontab,v 4.2 2007/09/17 02:41:00 jleffler Exp $
# Crontab file for Home Directory for Jonathan Leffler (JL)
#-----------------------------------------------------------------------------
#Min Hour Day Month Weekday Command
#-----------------------------------------------------------------------------
0 * * * * /usr/bin/ksh /work1/jleffler/bin/Cron/hourly
1 1 * * * /usr/bin/ksh /work1/jleffler/bin/Cron/daily
23 1 * * 1-5 /usr/bin/ksh /work1/jleffler/bin/Cron/weekday
2 3 * * 0 /usr/bin/ksh /work1/jleffler/bin/Cron/weekly
21 3 1 * * /usr/bin/ksh /work1/jleffler/bin/Cron/monthly
Скрипты в ~ / bin / Cron - все ссылки к одному сценарию «runcron», который выглядит так:
: "$Id: runcron.sh,v 2.1 2001/02/27 00:53:22 jleffler Exp $"
#
# Commands to be performed by Cron (no debugging options)
# Set environment -- not done by cron (usually switches HOME)
. $HOME/.cronfile
base=`basename $0`
cmd=${REAL_HOME:-/real/home}/bin/$base
if [ ! -x $cmd ]
then cmd=${HOME}/bin/$base
fi
exec $cmd ${@:+"$@"}
(Написано с использованием старого стандарта кодирования - в настоящее время я бы использовал shebang '#!' в начале.)
«~ / .cronfile» - это вариант моего профиля для использования cron - строго неинтерактивный и не эхо, чтобы быть шумным. Вы могли бы организовать выполнение .profile и так далее. (Материал REAL_HOME является артефактом моей среды - вы можете притворяться, что это то же самое, что и $ HOME.)
Итак, этот код читает соответствующую среду, а затем выполняет версию команды, отличную от Cron, из мой домашний каталог. Так, например, моя команда «weekday» выглядит так:
: "@(#)$Id: weekday.sh,v 1.10 2007/09/17 02:42:03 jleffler Exp $"
#
# Commands to be done each weekday
# Update ICSCOPE
n.updics
Команда «daily» проще:
: "@(#)$Id: daily.sh,v 1.5 1997/06/02 22:04:21 johnl Exp $"
#
# Commands to be done daily
# Nothing -- most things are done on weekdays only
exit 0
Установка vars в /etc/environment
также работала для меня в Ubuntu. Начиная с 12.04 переменные в / etc / environment загружаются для cron.
Если вы запускаете скрипты, выполняемые через cron, с помощью:
#!/bin/bash -l
Они должны забрать переменные среды ~ / .bash_profile
Другим способом - вдохновленным этим этим ответом - для «инъекции» является следующий (пример fcron):
%daily 00 12 \
set -a; \
. /path/to/file/containing/vars; \
set +a; \
/path/to/script/using/vars
Из help set
:
-a Пометить переменные, которые были изменены или созданы для экспорта.
Использование + вместо - приводит к отключению этих флагов.
blockquote>Таким образом, все между
set -
иset +
экспортируется вenv
и затем доступно для других скриптов и т. Д. Без использованияset
переменные получаются, но живут только вset
.Кроме того, полезно передавать переменные, когда программе требуется выполнить учетную запись, отличную от root, но вам понадобятся некоторые переменные внутри этой среды другого пользователя. Ниже приведен пример передачи в nullmailer vars для форматирования заголовка электронной почты:
su -s /bin/bash -c "set -a; \ . /path/to/nullmailer-vars; \ set +a; \ /usr/sbin/logcheck" logcheck
Вы можете определить переменные среды в самом crontab при запуске crontab -e
из командной строки.
LANG=nb_NO.UTF-8
LC_ALL=nb_NO.UTF-8
# m h dom mon dow command
* * * * * sleep 5s && echo "yo"
Эта функция доступна только для определенных реализаций cron. В настоящее время Ubuntu и Debian используют vixie-cron , что позволяет объявлять их в файле crontab (также GNU mcron ).
Archlinux и RedHat используют cronie , которые не позволяют объявлять переменные среды и будут вызывать синтаксические ошибки в cron .журнал. Обходное решение может быть выполнено для каждой записи:
# m h dom mon dow command
* * * * * export LC_ALL=nb_NO.UTF-8; sleep 5s && echo "yo"
Все, что вы установили в crontab
, будет доступно в cronjobs, как напрямую, так и используя переменные в скриптах.
You может настроить crontab
так, чтобы он устанавливал переменные, которые затем могут использовать cronjob:
$ crontab -l
myvar="hi man"
* * * * * echo "$myvar. date is $(date)" >> /tmp/hello
Теперь файл /tmp/hello
показывает такие вещи, как:
$ cat /tmp/hello
hi man. date is Thu May 12 12:10:01 CEST 2016
hi man. date is Thu May 12 12:11:01 CEST 2016
Вы можете настроить crontab
так, чтобы он задавал переменные, которые могут использовать скрипты:
$ crontab -l
myvar="hi man"
* * * * * /bin/bash /tmp/myscript.sh
И скажем, скрипт /tmp/myscript.sh
выглядит так:
echo "Now is $(date). myvar=$myvar" >> /tmp/myoutput.res
Он генерирует файл /tmp/myoutput.res
, показывающий:
$ cat /tmp/myoutput.res
Now is Thu May 12 12:07:01 CEST 2016. myvar=hi man
Now is Thu May 12 12:08:01 CEST 2016. myvar=hi man
...
Вместо
0 * * * * sh /my/script.sh
Используйте bash -l -c
0 * * * * bash -l -c 'sh /my/script.sh'
Для меня мне пришлось установить переменную среды для приложения php. Я отредактировал его, добавив следующий код в мой crontab.
$ sudo crontab -e
crontab:
ENVIRONMENT_VAR=production
* * * * * /home/deploy/my_app/cron/cron.doSomethingWonderful.php
и внутри doSomethingWonderful.php Я мог получить значение среды с помощью:
<?php
echo $_SERVER['ENVIRONMENT_VAR']; # => "production"
Надеюсь, это поможет!
Расширение на @Robert Brisita просто расширяется, также если вы не хотите настраивать все переменные профиля в скрипте, вы можете выбрать экспортируемые переменные в верхней части скрипта
В файле crontab -e:
SHELL=/bin/bash
*/1 * * * * /Path/to/script/script.sh
В script.sh
#!/bin/bash
export JAVA_HOME=/path/to/jdk
some-other-command
У меня есть еще одно решение для этой проблемы:
0 5 * * * . $HOME/.profile; /path/to/command/to/run
В этом случае он выберет всю переменную среды, определенную в файле $ HOME / .profile.
Of конечно $ HOME также не установлен, вы должны заменить его полным путем вашего $ HOME.
Расширение на примере @carestad, которое я нахожу более простым, заключается в том, чтобы запустить скрипт с помощью cron и иметь среду в скрипте.
В файле crontab -e:
SHELL=/bin/bash
*/1 * * * * $HOME/cron_job.sh
В файле cron_job.sh:
#!/bin/bash
source $HOME/.bash_profile
some_other_cmd
Любая команда после источника .bash_profile будет иметь вашу среду, как если бы вы вошли в систему.