2017-02-27 15 views
1

新しいcronタスクをサーバーにインストールしようとしています。コマンドラインでプロセスを実行できますが、cronで実行することはできません。これは、タスクがcronで実行されているときに、PATHとPYTHONPATHの環境変数が正しく設定されていないためです。 (私は実際にサーバー上のすべてのcronジョブを使用してこの問題を抱えていますが、簡単のため、この質問に一つのプロセスに焦点を当てています。)ここで環境変数がcronタスクに設定されない

は、プロセスのためのcronエントリです:

### procmon NLite ### */2 * * * * . ~/.bashrc; cd /var/networkip/nlite/proc_mon; . bashrc; cd bin; ./proc_mon.py > /dev/null 2>&1

PYTHONPATH リセットする必要がありますが、これは起きていない - のcronタスクが実行されたときに

BASEDIR=$PWD 
KODIAK_ROOT=$BASEDIR/ 
BASEPATH=$KODIAK_ROOT 

pathadd PYTHONPATH ${BASEDIR}/lib 

ので、:

は今、proc_monディレクトリ内のbashrcには含まれています。

これらのprocsをcron経由で正常に実行している他の古いサーバーがいくつかあります。
ソリューションは、これまで試みた:

  • はcrons
  • を実行するために失敗し、サーバーに正常にするcronタスクを実行しているから、すべてのbashrcまたはbash_profilesを比較して、これを確認するために環境変数をログに記録

問題ですソリューション私は興味がありません:

  • 環境変数を設定するcronタスク。 cronを介して実行する必要があるいくつかのprocsがあり、すべてがその特定のスクリプトに対して異なるPATHとPYTHONPATH変数を持っています。これを行うことは非常に乱雑になる可能性があり、将来のサーバーに同じprocsとcronをインストールすると、長期的な解決策としては適切ではありません。

さらに詳細:サーバー失敗のcronのための

  • のLinuxディストリビューション:CentOSのリリース6.8
  • のcronの成功とサーバーの
  • のLinuxディストリビューションは:のRed Hat Enterprise Linux Serverは、リリース5.2(Tikanga)

cronは他のサーバーでも動作できるため、問題に対する合理的な解決策が必要です。私はスーパーユーザでもあるので、modsは質問がそのプラットフォームに適しているかどうかを教えてください。あなたがそれらをpythonのプロセスで見られるようにするために、あなたのbashrcであなたの変数をexportする必要が

+0

更新:環境変数は、実際には問題ではありません。 CronはPOSIXモードで動作しているようです。 cronタスクの先頭に 'set + o posix'が追加されると、procは正常に実行されます。しかし、まだもっとグローバルな解決策が必要です... – datalie

答えて

1

は:

BASEDIR=$PWD 
export KODIAK_ROOT=$BASEDIR/ 
export BASEPATH=$KODIAK_ROOT 

pathadd PYTHONPATH ${BASEDIR}/lib 
export PYTHONPATH 
+0

申し訳ありませんが、私の質問を完全にお読みください。私はいくつかの他のサーバーで正確なcronタスクを実行しており、他のサーバーには問題はありません。私はあなたが提供した "解決策"についてはっきりとはっきりと述べていますが、私がインストールしているソフトウェアで将来のサーバービルドには面倒であるだけでなく、サーバー上でいくつかのcronタスクが実行されているその特定のスクリプトに関連する環境変数。 – datalie

関連する問題