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