CronJob not running

前端 未结 11 1059
攒了一身酷
攒了一身酷 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:44

    For me, the solution was that the file cron was trying to run was in an encrypted directory, more specifcically a user diretory on /home/. Although the crontab was configured as root, because the script being run exisited in an encrypted user directory in /home/ cron could only read this directory when the user was actually logged in. To see if the directory is encrypted check if this directory exists:

    /home/.ecryptfs/<yourusername>
    

    if so then you have an encrypted home directory.

    The fix for me was to move the script in to a non=encrypted directory and everythig worked fine.

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

    I found useful debugging information on an Ubuntu 16.04 server by running:

    systemctl status cron.service

    In my case I was kindly informed I had left a comment '#' off of a remark line:

    Aug 18 19:12:01 is-feb19 cron[14307]: Error: bad minute; while reading /etc/crontab
    Aug 18 19:12:01 is-feb19 cron[14307]: (*system*) ERROR (Syntax error, this crontab file will be ignored)
    
    0 讨论(0)
  • 2020-11-22 02:46

    I want to add 2 points that I learned:

    1. Cron config files put in /etc/cron.d/ should not contain a dot (.). Otherwise, it won't be read by cron.
    2. If the user running your command is not in /etc/shadow. It won't be allowed to schedule cron.

    Refs:

    1. http://manpages.ubuntu.com/manpages/xenial/en/man8/cron.8.html
    2. https://help.ubuntu.com/community/CronHowto
    0 讨论(0)
  • 2020-11-22 02:48

    I experienced same problem where crons are not running. We fixed by changing permissions and owner by Crons made root owner as we had mentioned in crontab AND Cronjobs 644 permission given

    0 讨论(0)
  • 2020-11-22 03:00

    WTF?! My cronjob doesn't run?!

    Here's a checklist guide to debug not running cronjobs:

    1. Is the Cron daemon running?
      • Run ps ax | grep cron and look for cron.
      • Debian: service cron start or service cron restart
    2. Is cron working?
      • * * * * * /bin/echo "cron works" >> /tmp/file
      • Syntax correct? See below.
      • You obviously need to have write access to the file you are redirecting the output to. A unique file name in /tmp which does not currently exist should always be writable.
    3. Is the command working standalone?
      • Check if the script has an error, by doing a dry run on the CLI
      • when testing your command, test as the user whose crontab you are editing, which might not be your login or root
    4. Can cron run your job?
      • Check /var/log/cron.log or /var/log/messages for errors.
      • Ubuntu: grep CRON /var/log/syslog
      • Redhat: /var/log/cron
    5. Check permissions
      • set executable flag on the command: chmod +x /var/www/app/cron/do-stuff.php
      • if you redirect the output of your command to a file, verify you have permission to write to that file/directory
    6. Check paths
      • check she-bangs / hashbangs line
      • do not rely on environment variables like PATH, as their value will likely not be the same under cron as under an interactive session
    7. Don't suppress output while debugging
      • commonly used is this suppression: 30 1 * * * command > /dev/null 2>&1
      • re-enable the standard output or standard error message output by removing >/dev/null 2>&1 altogether; or perhaps redirect to a file in a location where you have write access: >>cron.out 2>&1 will append standard output and standard error to cron.out in the invoking user's home directory.

    Still not working? Yikes!

    1. Raise the cron debug level
      • Debian
        • in /etc/default/cron
        • set EXTRA_OPTS="-L 2"
        • service cron restart
        • tail -f /var/log/syslog to see the scripts executed
      • Ubuntu
        • in /etc/rsyslog.d/50-default.conf
        • add or comment out line cron.crit /var/log/cron.log
        • reload logger sudo /etc/init.d/rsyslog reload
        • re-run cron
        • open /var/log/cron.log and look for detailed error output
      • Reminder: deactivate log level, when you are done with debugging
    2. Run cron and check log files again

    Cronjob Syntax

    # Minute  Hour  Day of Month      Month         Day of Week    User Command    
    # (0-59) (0-23)   (1-31)    (1-12 or Jan-Dec) (0-6 or Sun-Sat)  
    
        0       2       *             *                *          root /usr/bin/find
    

    This syntax is only correct for the root user. Regular user crontab syntax doesn't have the User field (regular users aren't allowed to run code as any other user);

    # Minute  Hour  Day of Month      Month         Day of Week    Command    
    # (0-59) (0-23)   (1-31)    (1-12 or Jan-Dec) (0-6 or Sun-Sat)  
    
        0       2       *             *                *          /usr/bin/find
    

    Crontab Commands

    1. crontab -l
      • Lists all the user's cron tasks.
    2. crontab -e, for a specific user: crontab -e -u agentsmith
      • Starts edit session of your crontab file.
      • When you exit the editor, the modified crontab is installed automatically.
    3. crontab -r
      • Removes your crontab entry from the cron spooler, but not from crontab file.
    0 讨论(0)
提交回复
热议问题