Cmdtime vs. Alternatives: A Practical Comparison and Use Cases

Automate Your Workflows Using Cmdtime — Examples and Scripts

Date: February 8, 2026

Cmdtime is a lightweight command-line utility designed to simplify time-based automation and workflow measurement. This article shows practical examples and ready-to-use scripts to help you integrate Cmdtime into build scripts, CI/CD pipelines, task scheduling, and developer tooling.

What Cmdtime does (brief)

  • Measure: capture execution time for commands or scripts.
  • Schedule: run commands at specific times or intervals.
  • Log: generate structured timestamps and duration logs for later analysis.
  • Trigger: run follow-up commands based on timing outcomes (e.g., long-running jobs).

Installation

Assume a typical install via package manager or download. Example (Linux/macOS with Homebrew-style):

bash

brew install cmdtime # or curl -sSL https://example.com/cmdtime/install.sh | bash

Basic usage examples

  1. Measure a single command:

bash

cmdtime run – echo “Hello, world!” # outputs start time, end time, duration, exit code
  1. Time a pipeline:

bash

cmdtime run – bash -lc ‘grep -R “TODO” src | wc -l’
  1. Schedule a command once at a specified time:

bash

cmdtime schedule –at “2026-02-09 02:30”bash -lc ‘backup.sh’
  1. Run a command every N minutes:

bash

cmdtime schedule –every 15m – bash -lc ‘sync-data.sh’

Example 1 — CI job timing and conditional step

Use Cmdtime to fail a step if it exceeds a threshold, preventing slow builds from progressing.

script: .gitlab-ci.yml snippet

yaml

stages: - test test: stage: test script: - > cmdtime run –format json – bash -lc ‘ timeout 10m npm test ’ > test-time.json || true - > DURATION=\((jq .duration_ms test-time.json) </span><span class="token scalar" style="color: rgb(163, 21, 21);"> if [ "\)DURATION” -gt 600000 ]; then echo “Tests exceeded 10 minutes (\(DURATION ms) — failing pipeline" </span><span class="token scalar" style="color: rgb(163, 21, 21);"> exit 1 </span><span class="token scalar" style="color: rgb(163, 21, 21);"> fi</span><span> </span></code></div></div></pre> <h3>Example 2 — Scheduled nightly backup with logging and rotation</h3> <p>Nightly backup script: backup-nightly.sh</p> <pre><div class="XG2rBS5V967VhGTCEN1k"><div class="nHykNMmtaaTJMjgzStID"><div class="HsT0RHFbNELC00WicOi8"><i><svg width="16" height="16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" d="M15.434 7.51c.137.137.212.311.212.49a.694.694 0 0 1-.212.5l-3.54 3.5a.893.893 0 0 1-.277.18 1.024 1.024 0 0 1-.684.038.945.945 0 0 1-.302-.148.787.787 0 0 1-.213-.234.652.652 0 0 1-.045-.58.74.74 0 0 1 .175-.256l3.045-3-3.045-3a.69.69 0 0 1-.22-.55.723.723 0 0 1 .303-.52 1 1 0 0 1 .648-.186.962.962 0 0 1 .614.256l3.541 3.51Zm-12.281 0A.695.695 0 0 0 2.94 8a.694.694 0 0 0 .213.5l3.54 3.5a.893.893 0 0 0 .277.18 1.024 1.024 0 0 0 .684.038.945.945 0 0 0 .302-.148.788.788 0 0 0 .213-.234.651.651 0 0 0 .045-.58.74.74 0 0 0-.175-.256L4.994 8l3.045-3a.69.69 0 0 0 .22-.55.723.723 0 0 0-.303-.52 1 1 0 0 0-.648-.186.962.962 0 0 0-.615.256l-3.54 3.51Z"></path></svg></i><p class="li3asHIMe05JPmtJCytG wZ4JdaHxSAhGy1HoNVja cPy9QU4brI7VQXFNPEvF">bash</p></div><div class="CF2lgtGWtYUYmTULoX44"><button type="button" class="st68fcLUUT0dNcuLLB2_ ffON2NH02oMAcqyoh2UU MQCbz04ET5EljRmK3YpQ CPXAhl7VTkj2dHDyAYAf" data-copycode="true" role="button" aria-label="Copy Code"><svg viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" fill-rule="evenodd" clip-rule="evenodd" d="M9.975 1h.09a3.2 3.2 0 0 1 3.202 3.201v1.924a.754.754 0 0 1-.017.16l1.23 1.353A2 2 0 0 1 15 8.983V14a2 2 0 0 1-2 2H8a2 2 0 0 1-1.733-1H4.183a3.201 3.201 0 0 1-3.2-3.201V4.201a3.2 3.2 0 0 1 3.04-3.197A1.25 1.25 0 0 1 5.25 0h3.5c.604 0 1.109.43 1.225 1ZM4.249 2.5h-.066a1.7 1.7 0 0 0-1.7 1.701v7.598c0 .94.761 1.701 1.7 1.701H6V7a2 2 0 0 1 2-2h3.197c.195 0 .387.028.57.083v-.882A1.7 1.7 0 0 0 10.066 2.5H9.75c-.228.304-.591.5-1 .5h-3.5c-.41 0-.772-.196-1-.5ZM5 1.75v-.5A.25.25 0 0 1 5.25 1h3.5a.25.25 0 0 1 .25.25v.5a.25.25 0 0 1-.25.25h-3.5A.25.25 0 0 1 5 1.75ZM7.5 7a.5.5 0 0 1 .5-.5h3V9a1 1 0 0 0 1 1h1.5v4a.5.5 0 0 1-.5.5H8a.5.5 0 0 1-.5-.5V7Zm6 2v-.017a.5.5 0 0 0-.13-.336L12 7.14V9h1.5Z"></path></svg>Copy Code</button><button type="button" class="st68fcLUUT0dNcuLLB2_ WtfzoAXPoZC2mMqcexgL ffON2NH02oMAcqyoh2UU MQCbz04ET5EljRmK3YpQ GnLX_jUB3Jn3idluie7R"><svg fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" fill-rule="evenodd" d="M20.618 4.214a1 1 0 0 1 .168 1.404l-11 14a1 1 0 0 1-1.554.022l-5-6a1 1 0 0 1 1.536-1.28l4.21 5.05L19.213 4.382a1 1 0 0 1 1.404-.168Z" clip-rule="evenodd"></path></svg>Copied</button></div></div><div class="mtDfw7oSa1WexjXyzs9y" style="color: var(--sds-color-text-01); font-family: var(--sds-font-family-monospace); direction: ltr; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; font-size: var(--sds-font-size-label); line-height: 1.2em; tab-size: 4; hyphens: none; padding: var(--sds-space-x02, 8px) var(--sds-space-x04, 16px) var(--sds-space-x04, 16px); margin: 0px; overflow: auto; border: none; background: transparent;"><code class="language-bash" style="color: rgb(57, 58, 52); font-family: Consolas, "Bitstream Vera Sans Mono", "Courier New", Courier, monospace; direction: ltr; text-align: left; white-space: pre; word-spacing: normal; word-break: normal; font-size: 0.9em; line-height: 1.2em; tab-size: 4; hyphens: none;"><span class="token shebang" style="color: rgb(238, 153, 0); font-weight: bold;">#!/usr/bin/env bash</span><span> </span><span></span><span class="token builtin" style="color: rgb(43, 145, 175);">set</span><span> -euo pipefail </span> <span></span><span class="token assign-left" style="color: rgb(54, 172, 170);">LOG_DIR</span><span class="token" style="color: rgb(57, 58, 52);">=</span><span class="token" style="color: rgb(163, 21, 21);">"/var/log/cmdtime-backups"</span><span> </span><span></span><span class="token" style="color: rgb(57, 58, 52);">mkdir</span><span> -p </span><span class="token" style="color: rgb(163, 21, 21);">"</span><span class="token" style="color: rgb(54, 172, 170);">\)LOG_DIR TIMESTAMP=\((</span><span class="token" style="color: rgb(57, 58, 52);">date</span><span class="token" style="color: rgb(54, 172, 170);"> -u +</span><span class="token" style="color: rgb(163, 21, 21);">"%Y%m%dT%H%M%SZ"</span><span class="token" style="color: rgb(54, 172, 170);">)</span><span> </span><span></span><span class="token assign-left" style="color: rgb(54, 172, 170);">LOGFILE</span><span class="token" style="color: rgb(57, 58, 52);">=</span><span class="token" style="color: rgb(163, 21, 21);">"</span><span class="token" style="color: rgb(54, 172, 170);">\)LOG_DIR/backup-\(TIMESTAMP</span><span class="token" style="color: rgb(163, 21, 21);">.json"</span><span> </span> <span>cmdtime run --format json -- </span><span class="token" style="color: rgb(57, 58, 52);">bash</span><span> -lc </span><span class="token" style="color: rgb(163, 21, 21);">' </span><span class="token" style="color: rgb(163, 21, 21);"> tar -czf /backups/site-\)TIMESTAMP.tar.gz /var/www/html > \(LOGFILE</span><span class="token" style="color: rgb(163, 21, 21);">"</span><span> </span> <span></span><span class="token" style="color: rgb(0, 128, 0); font-style: italic;"># Keep last 30 logs</span><span> </span><span></span><span class="token" style="color: rgb(57, 58, 52);">ls</span><span> -1t </span><span class="token" style="color: rgb(163, 21, 21);">"</span><span class="token" style="color: rgb(54, 172, 170);">\)LOGDIR/backup-*.json | tail -n +31 | xargs -r rm

Schedule with system cron or cmdtime scheduler:

bash

cmdtime schedule –every 24h –at “02:00” – /usr/local/bin/backup-nightly.sh

Example 3 — Developer hotfix: track slow database migrations

One-off wrapper to measure migration steps and produce a CSV for analysis.

measure-migrations.sh

bash

#!/usr/bin/env bash echo “migration,started_at,ended_at,durationms” > migrations.csv for f in migrations/*.sql; do NAME=\((</span><span class="token" style="color: rgb(57, 58, 52);">basename</span><span class="token" style="color: rgb(54, 172, 170);"> </span><span class="token" style="color: rgb(163, 21, 21);">"</span><span class="token" style="color: rgb(163, 21, 21);">\)f) cmdtime run –format csv –label \(NAME</span><span class="token" style="color: rgb(163, 21, 21);">"</span><span> -- </span><span class="token" style="color: rgb(57, 58, 52);">bash</span><span> -lc </span><span class="token" style="color: rgb(163, 21, 21);">"psql -f </span><span class="token" style="color: rgb(54, 172, 170);">\)f >> migrations.csv done

Advanced: chaining and conditional triggers

Trigger a cleanup only when a job completes under a threshold.

bash

cmdtime run –format json – bash -lc ‘long-job.sh’ > job.json DURATION=\((</span><span class="token" style="color: rgb(54, 172, 170);">jq .duration_ms job.json</span><span class="token" style="color: rgb(54, 172, 170);">)</span><span> </span><span></span><span class="token" style="color: rgb(0, 0, 255);">if</span><span> </span><span class="token" style="color: rgb(57, 58, 52);">[</span><span> </span><span class="token" style="color: rgb(163, 21, 21);">"</span><span class="token" style="color: rgb(54, 172, 170);">\)DURATION -lt 300000 ]; then cmdtime run – bash -lc ‘cleanup-temp.sh’ else echo “Job too slow; skip cleanup” fi

Integrating with observability

  • Emit JSON logs from cmdtime and ingest into your logging system (Fluentd, Logstash).
  • Use the duration field for alerting: create alerts for unusually long durations.

Tips and best practices

  • Format: prefer JSON for machine parsing in CI and observability.
  • Labels: use meaningful labels (–label) for grouping events.
  • Thresholds: enforce duration thresholds in pipelines to maintain performance SLAs.
  • Rotation: rotate cmdtime logs to avoid disk growth.
  • Security: run scheduled commands under least-privilege users and sanitize inputs.

Troubleshooting

  • If schedules fail, check system timezone and cmdtime daemon status.
  • For inaccurate durations, ensure system clock (NTP) is synchronized.
  • If output parsing fails, verify –format option and escaping in shells.

Conclusion

Cmdtime is a flexible tool for measuring and scheduling command execution. Use it to enforce performance budgets, automate routine tasks, and gather timing telemetry for observability. The examples above are ready to drop into CI, cron replacements, or developer scripts—adapt labels, formats, and thresholds to match your environment.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *