How to get CRON to call in the correct PATHs

前端 未结 15 968
时光取名叫无心
时光取名叫无心 2020-11-22 06:07

I\'m trying to get cron to call in the correct PATHs. When I run a Python script from shell the script runs fine as it uses the PATHs set in bashrc but when I use cron all t

相关标签:
15条回答
  • 2020-11-22 06:51

    I used /etc/crontab. I used vi and entered in the PATHs I needed into this file and ran it as root. The normal crontab overwrites PATHs that you have set up. A good tutorial on how to do this.

    The systemwide cron file looks like this:

    This has the username field, as used by /etc/crontab.
    # /etc/crontab: system-wide crontab
    # Unlike any other crontab you don't have to run the `crontab'
    # command to install the new version when you edit this file.
    # This file also has a username field, that none of the other crontabs do.
    
    SHELL=/bin/sh
    PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
    
    # m h dom mon dow user   command
    42 6 * * *   root    run-parts --report /etc/cron.daily
    47 6 * * 7   root    run-parts --report /etc/cron.weekly
    52 6 1 * *   root    run-parts --report /etc/cron.monthly
    01 01 * * 1-5 root python /path/to/file.py
    
    0 讨论(0)
  • 2020-11-22 06:53

    Adding a PATH definition into the user crontab with correct values will help... I've filled mine with just:

    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
    

    And it's enough to get all my scripts working... Include any custom path there if you need to.

    0 讨论(0)
  • 2020-11-22 06:53

    The simplest workaround I've found looks like this:

    * * * * * root su -l -c command
    

    This example invokes su as root user and starts the shell with the user's full environment, including $PATH, set as if they were logged in. It works the same on different distros, is more reliable than sourcing .bashrc (which hasn't worked for me) and avoids hardcoding specific paths which can be a problem if you're providing an example or setup tool and don't know what distro or file layout on the user's system.

    You can also specify the username after su if you want a different user than root, but you should probably leave the root parameter before su command since this ensures su has sufficient privileges to switch to any user you specify.

    0 讨论(0)
  • 2020-11-22 06:55

    On my AIX cron picks up it's environmental variables from /etc/environment ignoring what is set in the .profile.

    Edit: I also checked out a couple of Linux boxes of various ages and these appear to have this file as well, so this is likely not AIX specific.

    I checked this using joemaller's cron suggestion and checking the output before and after editing the PATH variable in /etc/environment.

    0 讨论(0)
  • 2020-11-22 06:55

    Should you use webmin then these are the steps how to set the PATH value:

    System
      -> Scheduled Cron Jobs
           -> Create a new environment variable
                -> For user: <Select the user name>
                -> Variable name: PATH
                -> Value: /usr/bin:/bin:<your personal path>
                -> Add environment variable: Before all Cron jobs for user
    
    0 讨论(0)
  • 2020-11-22 06:58

    The default environment for cron jobs is very sparse and may be very different from the environment you develop your python scripts in. For a script that might be run in cron, any environment that you depend on should be set explicitly. In the cron file itself, include full paths to python executables and to your python scripts.

    0 讨论(0)
提交回复
热议问题