1. ホーム
  2. linux

[解決済み] [Solved] crontabが使用する環境変数はどこで設定できますか?

2022-03-27 01:08:03

質問

1時間ごとにクーロンタブを走らせています。実行中のユーザーは、環境変数を .bash_profile しかし、明らかにこれらはcrontabが実行するときにピックアップされません。

で設定してみました。 .profile.bashrc が、まだ拾われていないようです。どなたか、crontabが拾えるような環境変数を置く場所をご存知でしょうか?

解決方法は?

コマンドを実行する前に、環境を設定するシェルスクリプトを'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バージョンのコマンドを実行するのです。 ですから、例えば、私の'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