Skip to content

Instantly share code, notes, and snippets.

Last active March 24, 2023 20:02
  • Star 26 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
Star You must be signed in to star a gist
What would you like to do?
Rundeck executions cleanup
#!/bin/bash -e
# see related issue:
# export required vars
export RD_URL=http://localhost:4440 RD_USER=admin RD_PASSWORD=admin RD_HTTP_TIMEOUT=300
# make sure rd & jq commands are in the PATH
which -- rd jq >/dev/null
del_executions() {
local project=$1
while true; do
rd executions deletebulk -R -y -m ${RD_OPTION_BATCH:-20} --older ${RD_OPTION_OLDER_THAN:-3d} -p $project || break
sleep 1s
# delete executions for each project
for p in $(RD_FORMAT=json rd projects list | jq -r .[]); do
del_executions $p
exit 0
Copy link

hello. why did you add the "while true" loop? what happens when you just run the deletebulk once?

Copy link

shamil commented Dec 28, 2017

@DVGeoffrey I delete in batches, hence the loop. If I try to delete all jobs at once most probably I will get HTTP timeout from rundeck API.

Copy link

@shamil, thank you for this.

Copy link


The ''|| break" mechanic on line 14 isn't working for me. It seems that the script doesn't detect when there are no further executions to delete and it just loops forever on a given project. Any advice? I ended up doing this:

  local _project="${1}"
  local _batch_size="${2}"
  local _max_age="${3}"

  printf "Deleting executions from project: \"${_project}\" older than: \"${_max_age}\" in batches of ${_batch_size}...\n"

  # Delete executions in $_project in batches of $_batch_size older than $_max_age.

  while [[ "${_executions_detected}" == true ]]; do

    exec {_stdout_copy}>&1 # make the FD named in "$stdout_copy" a copy of FD 1
    _executions_deleted=$(RD_FORMAT=json rd executions deletebulk --confirm --project "${_project}" --max "${_batch_size}" --older "${_max_age}" | tee /dev/fd/"${_stdout_copy}") # JSON format ensures either executions will be deleted or there will be no output.
    exec {_stdout_copy}>&- # close that copy previously created

    _executions_deleted_count=$(echo "${_executions_deleted}" | wc -l)
    printf "Executions deleted: ${_executions_deleted_count}...\n"

    sleep 1s

    if [[ -z "${_executions_deleted}" ]]; then


Copy link

@devinnasar, try -R:

[--require -R] : Treat 0 query results as failure, otherwise succeed if no executions were returned

Copy link

Very helpful script, thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment