1

Problem description : I am using something called play framework in my development which requires me to make the python script play available in the path. Hence I create a symbolic link in /usr/local/bin ... Now I have written a shell script (call it status.sh) which calls this python script as follows : play status <some values here related to my app> &> /tmp/xyz.txt and this shell script then sends me the file via email. This works perfectly when I execute the script as follows ./script.sh. However when the script is executed as a cron expression everyday I get an output from stderr saying 'play: command not found'.

Hence I did some digging on my own and here are my findings :

  1. echo $PATH when I am on the shell shows that I have /usr/local/bin available to me hence I can successfully execute the command play status
  2. however when I type in sudo bash and then echo $PATH I do not have the path /usr/local/bin anymore. It is a limited set of folders (one of them being /usr/bin).

Q : Why this behavior ?! I fail to understand why the path is different. Also as a workaround would you suggest I do :

  • new symbolic link from /usr/bin to /usr/local/bin (what are the side effects of this?)
  • remove /usr/local/bin sym link altogether and only use /usr/bin
  • is there a convention that I am not following here for linking new programs and executing them from $PATH ?

Thanks.

2 Answers 2

3

All users, including root, have a set of environment variables that are applied each time a new shell is opened.

For a normal user you can add to the existing path by editing ~/.bashrc and putting the followling line at the very end:

PATH=$PATH:/mypath_to_my_files

For root I believe you would have to edit /root/.bashrc instead. In this case however it probably makes sense to make sure that all users have this in their path and for this you can use the edit line above and just put it at the end of the file /etc/bash.bashrc

3
  • But if i am logged in as root user, what difference does it make if I execute sudo bash ? Am I already not the root user? What additional privileges does this provide?!
    – cyberjar09
    Nov 24, 2012 at 6:41
  • and if the root user has the path /usr/local/bin in the ENV variable, why does the cron job running execute with the privileges similar to that of sudo bash ?
    – cyberjar09
    Nov 24, 2012 at 6:44
  • 2
    No, you're not the root user, you're an admin user which is a normal user with admin privileges. As soon as you type "sudo bash" it invokes another shell as root. Nov 24, 2012 at 7:24
2

I would recommend you simply move the symbolic link to /usr/bin.

3
  • whats would be the effect of linking /usr/bin/play to point to /usr/local/bin/play ?
    – cyberjar09
    Nov 24, 2012 at 6:32
  • Also, what would be the effect of having /usr/bin/play and /usr/local/bin/play sym link to /root/play-folder/play-script ?
    – cyberjar09
    Nov 24, 2012 at 6:39
  • I was thinking that you should just have the symbolic link to play in /usr/bin/play since having it in both places would be pointless if everyone has /usr/bin in their path. Nov 24, 2012 at 16:53

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.