Где я могу установить переменные среды, которые будет использовать crontab?

У меня есть crontab, работающий каждый час. У пользователя, выполняющего его, есть переменные среды в .bash_profile та работа, когда пользователь выполняет задание от терминала, однако, очевидно, они не становятся взятыми crontab, когда это работает.

Я попытался установить их в .profile и .bashrc но они все еще, кажется, не взяты. Кто-либо знает, куда я могу поместить среду Вар, который может взять crontab?

249
задан the Tin Man 11 April 2013 в 17:04
поделиться

1 ответ

Попросите cron запустить сценарий оболочки, который устанавливает среду, перед запуском команды.

Всегда.

#   @(#)$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 ${@:+"$@"}

(Написан с использованием старого стандарта кодирования - в настоящее время я бы использовал шебанг '#!' в начале.)

'~ / .cronfile' - это вариант моего профиля для использования cron - строго не интерактивный и без эха из-за шума. Вместо этого вы можете организовать выполнение .profile и так далее. (Материал REAL_HOME является артефактом моей среды - вы можете притвориться, что это то же самое, что и $ HOME.)

Итак, этот код считывает соответствующую среду, а затем выполняет не-Cron версию команды из моего домашнего каталога. Так, например, моя команда «день недели» выглядит так:

:       "@(#)$Id: weekday.sh,v 1.10 2007/09/17 02:42:03 jleffler Exp $"
#
#       Commands to be done each weekday

# Update ICSCOPE
n.updics

Команда «день» проще:

:       "@(#)$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
84
ответ дан 23 November 2019 в 02:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: