CronJob not running

前端 未结 11 1058
攒了一身酷
攒了一身酷 2020-11-22 02:33

I have set up a cronjob for root user in ubuntu environment as follows by typing crontab -e

  34 11 * * * sh /srv/www/live/CronJobs/daily.sh
  0          


        
相关标签:
11条回答
  • 2020-11-22 02:37

    Finally I found the solution. Following is the solution:-

    1. Never use relative path in python scripts to be executed via crontab. I did something like this instead:-

      import os
      import sys
      import time, datetime
      
      CLASS_PATH = '/srv/www/live/mainapp/classes'
      SETTINGS_PATH = '/srv/www/live/foodtrade'
      sys.path.insert(0, CLASS_PATH)
      sys.path.insert(1,SETTINGS_PATH)
      
      import other_py_files
      
    2. Never supress the crontab code instead use mailserver and check the mail for the user. That gives clearer insights of what is going.

    0 讨论(0)
  • 2020-11-22 02:38

    It might also be a timezone problem.

    Cron uses the local time.

    Run the command timedatectl to see the machine time and make sure that your crontab is in this same timezone.

    • https://askubuntu.com/a/536489/1043751
    0 讨论(0)
  • 2020-11-22 02:39

    Another reason crontab will fail: Special handling of the % character.

    From the man file:

    The entire command portion of the line, up to a newline or a
    "%" character, will be executed by /bin/sh or by the shell specified
    in the SHELL variable of the cronfile.  A "%" character in the
    command, unless escaped with a backslash (\), will be changed into
    newline characters, and all data after the first % will be sent to
    the command as standard input.
    

    In my particular case, I was using date --date="7 days ago" "+%Y-%m-%d" to produce parameters to my script, and it was failing silently. I finally found out what was going on when I checked syslog and saw my command was truncated at the % symbol. You need to escape it like this:

    date --date="7 days ago" "+\%Y-\%m-\%d"
    

    See here for more details:

    http://www.ducea.com/2008/11/12/using-the-character-in-crontab-entries/

    0 讨论(0)
  • 2020-11-22 02:39

    To add another point, a file in /etc/cron.d must contain an empty new line at the end. This is likely related to the response by Luciano which specifies that:

    The entire command portion of the line, up to a newline or a "%"
    character, will be executed
    
    0 讨论(0)
  • 2020-11-22 02:43

    Sometimes the command that cron needs to run is in a directory where cron has no access, typically on systems where users' home directories' permissions are 700 and the command is in that directory.

    0 讨论(0)
  • 2020-11-22 02:44

    I've found another reason for user's crontab not running: the hostname is not present on the hosts file:

    user@ubuntu:~$ cat /etc/hostname
    ubuntu
    

    Now the hosts file:

    user@ubuntu:~$ cat /etc/hosts
    127.0.0.1 localhost
    
    # The following lines are desirable for IPv6 capable hosts
    ::1 ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    ff02::3 ip6-allhosts
    

    This is on a Ubuntu 14.04.3 LTS, the way to fix it is adding the hostname to the hosts file so it resembles something like this:

    user@ubuntu:~$ cat /etc/hosts
    127.0.0.1 ubuntu localhost
    
    # The following lines are desirable for IPv6 capable hosts
    ::1 ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    ff02::3 ip6-allhosts
    
    0 讨论(0)
提交回复
热议问题