|
|
- <h1>Monitoring Cron Jobs</h1>
- <p>SITE_NAME is perfectly suited for monitoring cron jobs. All you have to do is
- update your cron job command to send a HTTP request to SITE_NAME
- after a job completes.</p>
- <p>Let's look at an example:</p>
- <div class="highlight"><pre><span></span>$ crontab -l
- <span class="c1"># m h dom mon dow command</span>
- <span class="m">8</span> <span class="m">6</span> * * * /home/user/backup.sh
- </pre></div>
-
-
- <p>The above job runs <code>/home/user/backup.sh</code> every day at 6:08. The backup
- script is presumably a headless, background process. Even if it works
- correctly currently, it can start silently failing in future, without
- anyone noticing.</p>
- <p>You can set up SITE_NAME to notify you whenever the backup script does not
- run on time or does not complete successfully. Here are the steps to do that.</p>
- <ol>
- <li>
- <p>If you have not already, sign up for a free SITE_NAME account.</p>
- </li>
- <li>
- <p>In your SITE_NAME account, <strong>add a new check</strong>.</p>
- </li>
- <li>
- <p>Give the check <strong>a meaningful name</strong>. Good naming will become
- increasingly important as you add more checks to your account.</p>
- </li>
- <li>
- <p>Edit the check's <strong>schedule</strong>:</p>
- <ul>
- <li>change its type from "Simple" to "Cron"</li>
- <li>enter <code>8 6 * * *</code> in the cron epression field</li>
- <li>set the timezone to match your machine's timezone</li>
- </ul>
- </li>
- <li>
- <p>Take note of your check's unique <strong>ping URL</strong></p>
- </li>
- </ol>
- <p>Finally, edit your cron job definition and append a curl or wget call
- after the command:</p>
- <div class="highlight"><pre><span></span>$ crontab -e
- <span class="c1"># m h dom mon dow command</span>
- <span class="m">8</span> <span class="m">6</span> * * * /home/user/backup.sh <span class="o">&&</span> curl -fsS --retry <span class="m">3</span> PING_URL > /dev/null
- </pre></div>
-
-
- <p>Now, each time your cron job runs, it will send a HTTP request to the ping URL.
- Since SITE_NAME knows the schedule of your cron job, it can calculate
- the dates and times when the job should run. As soon as your cron job doesn't
- report at an expected time, SITE_NAME will send you a notification.</p>
- <p>This monitoring technique takes care of various failure scenarios that could
- potentially go unnoticed otherwise:</p>
- <ul>
- <li>The whole machine goes down (power outage, janitor stumbles on wires, VPS provider problems, etc.)</li>
- <li>cron daemon is not running, or has invalid configuration</li>
- <li>cron does start your task, but the task exits with non-zero exit code</li>
- </ul>
- <h2>Curl Options</h2>
- <p>The extra options tells curl to not print anything to standard output unless
- there is an error. Feel free to adjust the curl options to suit your needs.</p>
- <table class="table curl-opts">
- <tr>
- <th>&&</th>
- <td>Run curl only if <code>/home/user/backup.sh</code> exits with an exit code 0</td>
- </tr>
- <tr>
- <th>
- -f, --fail
- </th>
- <td>Makes curl treat non-200 responses as errors</td>
- </tr>
- <tr>
- <th>-s, --silent</th>
- <td>Silent or quiet mode. Don't show progress meter or error messages.</td>
- </tr>
- <tr>
- <th>-S, --show-error</th>
- <td>When used with -s it makes curl show error message if it fails.</td>
- </tr>
- <tr>
- <th>--retry <num></th>
- <td>
- If a transient error is returned when curl tries to perform a
- transfer, it will retry this number of times before giving up.
- Setting the number to 0 makes curl do no retries
- (which is the default). Transient error means either: a timeout,
- an FTP 4xx response code or an HTTP 5xx response code.
- </td>
- </tr>
- <tr>
- <th>> /dev/null</th>
- <td>
- Redirect curl's stdout to /dev/null (error messages go to stderr,)
- </td>
- </tr>
- </table>
-
- <h2>Looking up Your Machine's Time Zone</h2>
- <p>On modern GNU/Linux systems, you can look up the time zone using the
- <code>timedatectl status</code> command and looking for "Time zone" in its output:</p>
- <div class="highlight"><pre><span></span>$ timedatectl status
-
- Local time: C 2020-01-23 12:35:50 EET
- Universal time: C 2020-01-23 10:35:50 UTC
- RTC time: C 2020-01-23 10:35:50
- <span class="hll"> Time zone: Europe/Riga (EET, +0200)
- </span>System clock synchronized: yes
- NTP service: active
- RTC in local TZ: no
- </pre></div>
|