How to set up environment for Python in cron?

I have a Python script that runs fine standalone. When I add it to the cron on a Solaris, it fails. From the output log, the problem is it cannot find the PATH and LID_LIBRARY_PATH of the executable embedded in the Python. My question is how to set this up? Should this be done in the Python or in the cron? I have tried various ways without success. Here are two examples:

02 * * * * /home/<user>/test.py input1 > /tmp/test.log 2>&1
02 * * * * SHELL=/usr/bin/bash; export SHELL; . $HOME/.profile_user; /home/<user>/test.py input1 > /tmp/test.log 2>&1

Basically the Python runs with one input parameter. In the Python script, it calls a 3rd party executable. I see two env variable scripts I need to run - one is the .profile_user and another one is the app specific env.

Many thanks!
eduliuAsked:
Who is Participating?
 
gelonidaConnect With a Mentor Commented:
Third way is to set the vars directly in the crontab entry:


PATH=/usr/bin:mypath LD_LIBRARY_PATH=/usr/bin:mypath  /home/<user>/test.py input1


Please note.
no semicolons and no export statementments.

In all three cases you must be sure to add ALL required directories and all required environment variables, that are needed
for your third party executable to be run.
As I don't knowit you might have to experiment
0
 
woolmilkporcCommented:
Simplest way would be running the script from root's crontab as the "normal" user with "su -", so that the full environment of that user will be initialized.

02 * * * * su - normal_user -c "/home/<user>/test.py input1 > /tmp/test.log 2>&1"

wmp
0
 
eduliuAuthor Commented:
I just tried, but it didn't work - it didn't run. I guess it's becuase I'm not running cron as root. The account I use can create cron but under my account I assume. Any other way to insert a couple of scripts to set up the environment? Thanks!
0
Cloud Class® Course: CompTIA Healthcare IT Tech

This course will help prep you to earn the CompTIA Healthcare IT Technician certification showing that you have the knowledge and skills needed to succeed in installing, managing, and troubleshooting IT systems in medical and clinical settings.

 
gelonidaCommented:
if you want to call 3rd party executables, then it is enough to set the PATH variable from within python before you call your executable.


Alternatively you can create a wrapper shell script setting up the env before calling your python script.

import os
os.environ['PATH'] = 'newpath:' + os.environ['PATH']
os.environ['LD_LIBRARY_PATH'] = 'newpath:' + os.environ['LD_LIBRARY_PATH']
0
 
gelonidaCommented:
the wrapper script solution would be:

#!/bin/sh
export PATH="newpath:$PATH"
export LD_LIBRARY_PATH="newpath:$LD_LIBRARY_PATH"

mypythonscript "$@"


0
 
eduliuAuthor Commented:
Thank you so much for the detailed and various options. Quite embarrassing, the cause was one variable in one of the env scripts had a value assigned wrong. Things are working now. Appreciate the help!
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.