---
title: "norc-cli: fix cron jobs from a terminal, no SSH"
description: "Pair a server once, then see every job, check run history and edit the crontab from a terminal. norc-cli connects outbound only and needs no GUI."
url: https://norc.app/cli
---

$ norc-cli

# Fix a cron job from your terminal. No SSH.

Install norc-cli on any server and pair it once with a device code. It runs as a background service that connects out to norc, so you can see every job, check run history and edit the crontab from a terminal.

Install norc-cli [v0.3.2](https://github.com/norcapp/norc-cli/releases)

Prefer a GUI? [Explore norc-desktop.](https://norc.app/desktop)

prod-03 · norc-cli

$ norc pair  
 
\[QR code\] enter the code in the norc web app to pair this machine: R2M-4XQ paired. machine id: 9c21f0a4-5e3b-4d28-8f16-7a0b3c2d1e95  
 
$ norc jobs list  
 
6d4f1b2e-8a3c-4f71-9b0d-2c5e7a1f4d90 enabled 0 3 \* \* \* /opt/backup/nightly.sh (unmanaged) enabled 0 4 \* \* 0 /etc/scripts/legacy-rotate.sh  

## Install norc-cli

Live today via npm, Homebrew, apt and Scoop.

| Channel | Platform | Command |
| --- | --- | --- |
| npm | macOS, Linux, Windows | `npm install -g norc-cli` |
| brew | macOS | `brew install norcapp/norc/norc-cli` |
| apt | Linux | `sudo apt install norc-cli` [needs a one-time repo + key setup first](https://norc.app/docs/cli#apt-linux) |
| scoop | Windows | `scoop bucket add norc https://github.com/norcapp/scoop-norc; scoop install norc-cli` [installs the CLI; pair it afterwards with norc login. Managing crontab jobs needs a crontab, which Windows lacks (Task Scheduler support is planned)](https://norc.app/docs/cli#apt-linux) |

Verify your download (SHA-256)v0.3.2

After downloading, run the command for your system and check that the hash it prints matches the one listed for that file.

macOS

`shasum -a 256 <file>`

Linux

`sha256sum <file>`

Windows (PowerShell)

`Get-FileHash <file>`

-   norc-linux-arm64`61b7d4dd4bf06240795d7534b0b1d7d375dc9c2770ec391292d9134e18c21f2d`
-   norc-linux-x64`e0f91b4984cf08e07c9b2deb538044defb8470ba3a333b5409420d13b9f08570`
-   norc-macos-arm64`43058a60493fbf772f507d20e9a06937454b2d47adb8f4cf64639cd95a7f18f9`
-   norc-macos-x64`431a5c4b202b562c88d01007b993d6dc52b0f2e4ae666eba43f62551ec60b228`
-   norc-win-x64.exe`d3eae94fd7349f589cf73abaa96ce0341f2439375be5a7c694d527d6aa00d9b3`

[v0.3.2](https://github.com/norcapp/norc-cli/releases)

## Pair once. Run unattended.

Install, pair, add a job, and register the background service. Four commands and the server shows up in norc.

prod-03 · norc-cli

$ norc pair  
 
\[QR code\] enter the code in the norc web app to pair this machine: R2M-4XQ paired. machine id: 9c21f0a4-5e3b-4d28-8f16-7a0b3c2d1e95  
 
$ norc jobs add "0 3 \* \* \*" /opt/backup/nightly.sh  
 
added job 6d4f1b2e-8a3c-4f71-9b0d-2c5e7a1f4d90  
 
$ norc service install  
 
norc service installed.  
 
$ norc jobs list  
 
6d4f1b2e-8a3c-4f71-9b0d-2c5e7a1f4d90 enabled 0 3 \* \* \* /opt/backup/nightly.sh (unmanaged) enabled 0 4 \* \* 0 /etc/scripts/legacy-rotate.sh  

## No browser on the box?

CI runners and fresh VMs don't have a browser to pop a device code into. Pair with an API key instead of a device code: `norc login --key`. If a machine won't connect, `--debug` prints what norc is doing, with the API key redacted.

ci-runner · norc-cli

$ norc login --key norc\_sk\_XXXXXXXXXXXXXXXXXXXX --debug  
 
\[debug\] command: login args: \[ '--key', 'norc\_sk\_XXXX…(28 chars)' \] \[debug\] vault url: https://vault.norc.app (default) \[debug\] supabase url: https://eiuegfdaddrisfboijyy.supabase.co (default) \[debug\] login: --key present: true NORC\_API\_KEY set: false --email: (none) \[debug\] login: using API-key path, POST https://vault.norc.app/api/v1/machines key: norc\_sk\_XXXX…(28 chars) \[debug\] POST https://vault.norc.app/api/v1/machines { authorization: 'Bearer norc\_sk\_XXXX…(28 chars)', hostname: 'prod-03' } \[debug\] response status: 200 body: { machine\_id: '8c9844d4-1f3a-4b6e-9d52-e07a6c3b1f48', device\_token: 'a1b2c3d4e5f6…(43 chars)' } …  

## Built for servers you rarely log into

The background service uses your system cron and leaves it in place.

### Per-user background service

Installs as a systemd --user unit, a macOS LaunchAgent, or a logon-triggered Windows Scheduled Task. It needs no root or admin rights and starts on login.

### Safe crontab writes

norc-cli only touches the jobs it manages. Hand-written and other entries stay as they are.

### Cross-device sync

Jobs and machines stay in sync on every device you sign in from.

### Run history & failures

See when jobs ran, what they returned, and which ones failed, instead of finding out days later.

### AI schedule generation

Optional. Describe a schedule in plain language and get the cron expression, with the next runs previewed. Bring your own key.

### Headless login

norc login --key pairs a machine with an API key instead of a device code. It needs no browser and no email round trip, which suits CI runners and provisioning scripts.

### Debug tracing, secrets redacted

\--debug (or NORC\_DEBUG=1) traces every backend call and config path when something isn’t connecting. API keys and device tokens print as a short prefix, never in full.

### Works alongside norc-desktop

If norc-desktop is also installed on the same machine, norc-cli warns you at install time and on every startup, so the two don't silently race for the same crontab.

## How norc-cli compares

Raw cron has no sync, history or alerts. Monitoring-only tools tell you a job failed after the fact, but they can't change the schedule. norc-cli lets you see and edit jobs across every machine, headless, and keeps the monitoring.

|  | Raw cron | Monitoring-only tools | norc-cli |
| --- | --- | --- | --- |
| Cross-device sync | No | No | Yes |
| Edits jobs remotely | No | No | Yes |
| Run history | No | Yes | Yes |
| Runs headless, no GUI | Yes | Yes | Yes |

See the full comparison against [Cronitor, Healthchecks.io & Dead Man's Snitch →](https://norc.app/compare)

Install norc-cli on a server and manage its crontab from anywhere.

Install norc-cli
