run-one(1)
π run-one(1) β the "bestie, you only need ONE of these running" manual π
okay so hi, this is run-one from the run-one family of scripts and honestly? it's giving cronjob guardian angel. let's get into it. β¨
πΈ NAME πΈ
run-one β run just one instance at a time of some command and unique set of arguments (useful for cronjobs, eg)
π SYNOPSIS π
run-one COMMAND [ARGS]
run-this-one COMMAND [ARGS]
run-one-constantly COMMAND [ARGS]
keep-one-running COMMAND [ARGS]
run-one-until-success COMMAND [ARGS]
run-one-until-failure COMMAND [ARGS]
π¦ DESCRIPTION π¦
run-one is a wrapper script that runs no more than one unique instance of some command with a unique set of arguments.
This is often useful with cronjobs, when you want no more than one copy running at a time.
run-this-one is exactly like run-one, except that it will use pgrep(1) and kill(1) to find and kill any running processes owned by the user and matching the target commands and arguments. Note that run-this-one will block while trying to kill matching processes, until all matching processes are dead. π
run-one-constantly operates exactly like run-one except that it respawns "COMMAND [ARGS]" any time COMMAND exits (zero or non-zero). it's giving "we go again" energy π₯
keep-one-running is an alias for run-one-constantly. same girl, different name π
run-one-until-success operates exactly like run-one-constantly except that it respawns "COMMAND [ARGS]" until COMMAND exits successfully (ie, exits zero). π
run-one-until-failure operates exactly like run-one-constantly except that it respawns "COMMAND [ARGS]" until COMMAND exits with failure (ie, exits non-zero). π
π EXAMPLE π
In one shell:
$ run-one rsync -azP $HOME $USER@example.com:/srv/backup
foouser/
foouser/.bash_history
40298 100% 37.13MB/s 0:00:00 (xfer#1, to-check=3509/3516)
foouser/.viminfo
20352 100% 98.39kB/s 0:00:00 (xfer#3, to-check=3478/3516)
...
sent 746228 bytes received 413059 bytes 36802.76 bytes/sec
total size is 3732890955 speedup is 3219.99
In another shell, while the first is still running:
$ run-one rsync -azP $HOME $USER@example.com:/srv/backup
$ echo $?
1
Another example... In one shell:
$ run-one top
In another shell:
$ run-one top
$ echo $?
1
$ run-this-one top
top - 17:15:36 up 1:43, 3 users, load average: 1.05, 1.04, 1.00
Tasks: 170 total, 1 running, 169 sleeping, 0 stopped, 0 zombie
...
And note that the process in the first shell was killed. π«’
You might want to keep one ssh connection up and running all the time, with:
$ run-one-constantly ssh -N -C -L 3128:localhost:3128 -L 7778:localhost:7778 example.com &
π SEE ALSO π
π AUTHOR π
This manpage and the utility was written by Dustin Kirkland <kirkland@ubuntu.com> for Ubuntu systems (but may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 3 published by the Free Software Foundation.
On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL, or on the web at http://www.gnu.org/licenses/gpl.txt.
and that's the whole thing, bestie π«Ά this was run-one, from the run-one manual, and it's dated 9 Jan 2011 β iconic, timeless, lowkey ancient but still serving. go forth and cron responsibly. πβ¨
π¦ where this page comes from
- ubuntu jammy: run-one 1.17-0ubuntu1 Β· GPL-3.0-only
- ubuntu noble: run-one 1.17-0ubuntu2 Β· GPL-3.0-only
- ubuntu questing: run-one 1.17-0ubuntu2
- ubuntu resolute: run-one 1.17-0ubuntu3 Β· GPL-3.0-only
- ubuntu stonking: run-one 1.17-0ubuntu3 Β· GPL-3.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms