Skip to content

sixnix-deskctl

For whoever is running the desk.

sixnix-deskctl runs a desk’s maintenance tasks. It finds the web container and runs there, so the long docker compose exec -u www-data web php artisan in front of everything is not something you type.

Terminal window
curl -fsSL -o /usr/local/bin/sixnix-deskctl https://registry.sixnix.net/install/sixnix-deskctl
chmod +x /usr/local/bin/sixnix-deskctl

Run it from the directory holding docker-compose.yml. If you would rather run it from anywhere, set DESK_DIR to that directory.

It is not sixnix-desk

There are two CLIs and they do unrelated things.

  • sixnix-desk works one project’s issues over the API, from anywhere, with an automation key. For CI jobs, scripts and assistants. See Automation keys and the CLI.
  • sixnix-deskctl administers an installation, on the machine it is installed on. This page.

What it does

This is sixnix-deskctl help, which is where it comes from. If the two ever disagree, believe the command.

Everyday
status which services are running, and whether they are well
version the release this desk is on
logs [service] [-f] what the containers are saying
tail the desk's own log, followed
shell a shell where the application lives
tinker a REPL with the desk's database behind it
Backups
backup take one now: the database and the files
backups what backups there are
restore [NAME] put one back, replacing what is here. Asks first.
People
admin EMAIL create an administrator, or reset one's password
Workers
workers the queue workers, and whether each is running
workers restart restart them without restarting the container
Upgrading
upgrade back up, fetch the new compose file and image, and bring it up
upgrade --dry-run say what would change, and change nothing
Upkeep
migrate apply any pending database changes
migrate:status what is applied and what is pending
optimize rebuild the desk's caches after a configuration change
cache:clear empty the application cache
queue:restart tell the workers to pick up new code
queue:failed jobs that gave up
queue:retry ID|all put them back
mail:poll fetch from the mailboxes now, rather than waiting
knowledge:refresh re-read knowledge sources that are due
Demonstration data
demo [--scale=N] fill this desk with invented brands, tickets and issues to look at
demo --undo take it all out again
Moving in
blesta:import-tickets import tickets from a Blesta Support Manager. Try --dry-run first.
Anything else
artisan COMMAND … run an artisan command directly. Everything is reachable this way;
the list above is what you are likely to want.
DESK_DIR=/path where the desk is, if you are not standing in it

Why the list is short

Laravel ships around a hundred and fifty commands. Most mean nothing to somebody running a support desk, and a few of them end it. The short list is what you are likely to want; everything else is still there behind sixnix-deskctl artisan ….

Four are refused by name rather than hidden, so that somebody reaching for one is told why:

migrate:fresh, migrate:reset, migrate:refresh, db:wipeevery ticket, client and setting, with no undo
queue:flush, queue:clearqueued work, mail waiting to go out, drafts, indexing

Each refusal names the command that would have been the right one instead, and tells you how to insist if you really mean it.

What it deliberately will not tell you

sixnix-deskctl status says which services are running. It does not say whether the desk is well, and the difference matters: a queue with no worker looks perfectly healthy from outside. The desk’s own answer to that is Settings → Health, which watches the heartbeat the scheduler writes.

The reason it is not here: the only command that touches the heartbeat records one. Calling it from status would make a desk whose scheduler had stopped insist it was fine, which is worse than the question going unanswered.