cPanel, Using Cron
What is Cron
From https://en.wikipedia.org/wiki/Cron:
The software utility cron is a time-based job scheduler in Unix-like computer operating systems. People who set up and maintain software environments use cron to schedule jobs (commands or shell scripts) to run periodically at fixed times, dates, or intervals. cron is most suitable for scheduling repetitive tasks.
Cron in cPanel
cPanel provides a graphical interface for setting up your crontab. To access it, find "Cron Jobs" in the advanced section of your dashboard. Creating a new cron job is as simple as filling in the form fields. You can select from several pre-defined common timings or manually specify each of minute, hour, day, month, and weekday.
When choosing a schedule for your cron job, keep the following factors in mind
- User cron jobs are not permitted to run more than once every 15 minutes
- Jobs that run once per day should be scheduled during outside of business hours if possible
- Be aware of how long your job takes to run and ensure that it is scheduled in such a way that it will always complete before running again
Some of the tools available in cPanel may schedule cron jobs automatically. For example, Softaculous backup tasks and Drupal update checks may appear in your crontab even if you have never used this interface before. Below is an example of the web-based view of your scheduled cron jobs.
Special considerations when running commands via Cron
When you run commands from a login shell, you have a set of environment variables that are referenced. The environment that cron has to work with is much more limited. Therefore, if your script depends on information provided by your environment it may not run correctly as a cron job. To avoid this issue, ensure that any variables you need are explicitly set from within you script and use the full path to any commands or supporting programs you may call. See below for an example of the differences between your login environment and the environment available to cron. The most likely cause of issues is the more limited "PATH" variable but any environment variables you have set for yourself will also be missing from cron's environment. You can review your own user environment by logging in via SSH and typing "env."
Cron's Environment
XDG_SESSION_ID=<id>
SHELL=/bin/bash
MAILTO=<email specified on Cron Jobs interface>
USER=<accountname>
PATH=/usr/bin:/bin
PWD=/home/<accountname>
LANG=en_US.UTF-8
SHLVL=1
HOME=/home/<accountname>
LOGNAME=<accountname>
XDG_RUNTIME_DIR=/run/user/<id>
_=/usr/bin/env
Example User Environment
XDG_SESSION_ID=<id>
HOSTNAME=web.illinois.edu
TERM=xterm-256color
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=<client IP info>
SSH_TTY=/dev/pts/1
USER=<accountname>
LS_COLORS=rs=0:di=38;5;27:ln=38;5;51:mh=44;38;5;15:pi=40;38;5;11:so=38;5;13:do=38;5;5:bd=48;5;232;38;5;11:cd=48;5;232;38;5;3:or=48;5;232;38;5;9:mi=05;48;5;232;38;5;15:su=48;5;196;38;5;15:sg=48;5;11;38;5;16:ca=48;5;196;38;5;226:tw=48;5;10;38;5;16:ow=48;5;10;38;5;21:st=48;5;21;38;5;15:ex=38;5;34:*.tar=38;5;9:*.tgz=38;5;9:*.arc=38;5;9:*.arj=38;5;9:*.taz=38;5;9:*.lha=38;5;9:*.lz4=38;5;9:*.lzh=38;5;9:*.lzma=38;5;9:*.tlz=38;5;9:*.txz=38;5;9:*.tzo=38;5;9:*.t7z=38;5;9:*.zip=38;5;9:*.z=38;5;9:*.Z=38;5;9:*.dz=38;5;9:*.gz=38;5;9:*.lrz=38;5;9:*.lz=38;5;9:*.lzo=38;5;9:*.xz=38;5;9:*.bz2=38;5;9:*.bz=38;5;9:*.tbz=38;5;9:*.tbz2=38;5;9:*.tz=38;5;9:*.deb=38;5;9:*.rpm=38;5;9:*.jar=38;5;9:*.war=38;5;9:*.ear=38;5;9:*.sar=38;5;9:*.rar=38;5;9:*.alz=38;5;9:*.ace=38;5;9:*.zoo=38;5;9:*.cpio=38;5;9:*.7z=38;5;9:*.rz=38;5;9:*.cab=38;5;9:*.jpg=38;5;13:*.jpeg=38;5;13:*.gif=38;5;13:*.bmp=38;5;13:*.pbm=38;5;13:*.pgm=38;5;13:*.ppm=38;5;13:*.tga=38;5;13:*.xbm=38;5;13:*.xpm=38;5;13:*.tif=38;5;13:*.tiff=38;5;13:*.png=38;5;13:*.svg=38;5;13:*.svgz=38;5;13:*.mng=38;5;13:*.pcx=38;5;13:*.mov=38;5;13:*.mpg=38;5;13:*.mpeg=38;5;13:*.m2v=38;5;13:*.mkv=38;5;13:*.webm=38;5;13:*.ogm=38;5;13:*.mp4=38;5;13:*.m4v=38;5;13:*.mp4v=38;5;13:*.vob=38;5;13:*.qt=38;5;13:*.nuv=38;5;13:*.wmv=38;5;13:*.asf=38;5;13:*.rm=38;5;13:*.rmvb=38;5;13:*.flc=38;5;13:*.avi=38;5;13:*.fli=38;5;13:*.flv=38;5;13:*.gl=38;5;13:*.dl=38;5;13:*.xcf=38;5;13:*.xwd=38;5;13:*.yuv=38;5;13:*.cgm=38;5;13:*.emf=38;5;13:*.axv=38;5;13:*.anx=38;5;13:*.ogv=38;5;13:*.ogx=38;5;13:*.aac=38;5;45:*.au=38;5;45:*.flac=38;5;45:*.mid=38;5;45:*.midi=38;5;45:*.mka=38;5;45:*.mp3=38;5;45:*.mpc=38;5;45:*.ogg=38;5;45:*.ra=38;5;45:*.wav=38;5;45:*.axa=38;5;45:*.oga=38;5;45:*.spx=38;5;45:*.xspf=38;5;45:
PASSENGER_INSTANCE_REGISTRY_DIR=/var/passenger
MAIL=/var/spool/mail/<accountname>
PATH=/usr/local/cpanel/3rdparty/lib/path-bin:/usr/local/cpanel/3rdparty/lib/path-bin:/usr/local/cpanel/3rdparty/lib/path-bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/cpanel/composer/bin:/home/<accountname>/.local/bin:/home/<accountname>/bin
PWD=/home/<accountname>
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
SHLVL=1
HOME=/home/<accountname>
LOGNAME=<accountname>
SSH_CONNECTION=<info>
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/<id>
HISTTIMEFORMAT=%F %T
_=/usr/bin/env