How to check the build queue for an existing job name?

In my setup, I have a pipeline that triggers a job periodically. What I would like to do is to check to see if an existing job is already in the queue so that I don’t unnecessarily trigger another one that may create a resource-starving condition by filling up the queue. From reading the documentation and from experimentation, I see that the items in the queue going through different states and before being assigned an executor, they don’t have an action, therefore, I don’t see a job name associated with the item. So my question is: Is there a way to check if the queue already contain a job matching a particular job name? Thanks for any leads.

Jenkins setup:

Jenkins: 2.426.3
OS: Linux - 6.5.0-17-generic
Java: 17.0.9 - Private Build (OpenJDK 64-Bit Server VM)
---
ant:497.v94e7d9fffa_b_9
antisamy-markup-formatter:162.v0e6ec0fcfcf6
apache-httpcomponents-client-4-api:4.5.14-208.v438351942757
artifactory:4.0.3
atlassian-bitbucket-server-integration:4.0.0
authentication-tokens:1.53.v1c90fd9191a_b_
bitbucket:241.v6d24a_57f9359
bitbucket-pullrequests-filter:13.vda_de92e841b_b_
bitbucket-push-and-pull-request:3.0.2
bitbucket-scm-filter-aged-refs:31.ve3b_ca_fc71d5b_
bootstrap5-api:5.3.2-3
bouncycastle-api:2.30.1.77-225.v26ea_c9455fd9
branch-api:2.1148.vce12cfcdf090
build-timeout:1.32
caffeine-api:3.1.8-133.v17b_1ff2e0599
checks-api:2.0.2
cloudbees-bitbucket-branch-source:874.v659a_b_70f5e69
cloudbees-folder:6.858.v898218f3609d
commons-lang3-api:3.13.0-62.v7d18e55f51e2
commons-text-api:1.11.0-95.v22a_d30ee5d36
config-file-provider:968.ve1ca_eb_913f8c
credentials:1319.v7eb_51b_3a_c97b_
credentials-binding:657.v2b_19db_7d6e6d
data-tables-api:1.13.8-2
display-url-api:2.200.vb_9327d658781
docker-commons:439.va_3cb_0a_6a_fb_29
docker-workflow:572.v950f58993843
dtkit-api:3.0.2
durable-task:550.v0930093c4b_a_6
echarts-api:5.4.3-2
email-ext:2.104
font-awesome-api:6.5.1-2
git:5.2.1
git-client:4.6.0
github:1.38.0
github-api:1.318-461.v7a_c09c9fa_d63
github-branch-source:1772.va_69eda_d018d4
gradle:2.10
gson-api:2.10.1-15.v0d99f670e0a_7
handy-uri-templates-2-api:2.1.8-30.v7e777411b_148
inline-pipeline:1.0.3
instance-identity:185.v303dc7c645f9
ionicons-api:56.v1b_1c8c49374e
jackson2-api:2.16.1-373.ve709c6871598
jakarta-activation-api:2.0.1-3
jakarta-mail-api:2.0.1-3
javadoc:243.vb_b_503b_b_45537
javax-activation-api:1.2.0-6
javax-mail-api:1.6.2-9
jaxb:2.3.9-1
jfrog:1.5.0
jjwt-api:0.11.5-77.v646c772fddb_0
job-dsl:1.87
joda-time-api:2.12.7-29.v5a_b_e3a_82269a_
jquery3-api:3.7.1-1
jsch:0.2.16-86.v42e010d9484b_
json-path-api:2.9.0-33.v2527142f2e1d
junit:1259.v65ffcef24a_88
ldap:711.vb_d1a_491714dc
lockable-resources:1232.v512d6c434eb_d
mailer:463.vedf8358e006b_
matrix-auth:3.2.1
matrix-project:822.824.v14451b_c0fd42
maven-plugin:3.23
mercurial:1260.vdfb_723cdcc81
mina-sshd-api-common:2.12.0-90.v9f7fb_9fa_3d3b_
mina-sshd-api-core:2.12.0-90.v9f7fb_9fa_3d3b_
mstest:1.0.5
nunit:465.v0324954b_2990
okhttp-api:4.11.0-172.vda_da_1feeb_c6e
pam-auth:1.10
pipeline-build-step:540.vb_e8849e1a_b_d8
pipeline-github-lib:42.v0739460cda_c4
pipeline-graph-analysis:202.va_d268e64deb_3
pipeline-groovy-lib:704.vc58b_8890a_384
pipeline-input-step:477.v339683a_8d55e
pipeline-milestone-step:111.v449306f708b_7
pipeline-model-api:2.2175.v76a_fff0a_2618
pipeline-model-definition:2.2175.v76a_fff0a_2618
pipeline-model-extensions:2.2175.v76a_fff0a_2618
pipeline-rest-api:2.34
pipeline-stage-step:305.ve96d0205c1c6
pipeline-stage-tags-metadata:2.2175.v76a_fff0a_2618
pipeline-stage-view:2.34
plain-credentials:143.v1b_df8b_d3b_e48
plugin-util-api:3.8.0
resource-disposer:0.23
scm-api:683.vb_16722fb_b_80b_
script-security:1326.vdb_c154de8669
simple-queue:1.4.4
snakeyaml-api:2.2-111.vc6598e30cc65
ssh-credentials:308.ve4497b_ccd8f4
ssh-slaves:2.948.vb_8050d697fec
sshd:3.322.v159e91f6a_550
structs:337.v1b_04ea_4df7c8
test-results-analyzer:0.4.1
timestamper:1.26
token-macro:400.v35420b_922dcb_
trilead-api:2.133.vfb_8a_7b_9c5dd1
variant:60.v7290fc0eb_b_cd
workflow-aggregator:596.v8c21c963d92d
workflow-api:1291.v51fd2a_625da_7
workflow-basic-steps:1042.ve7b_140c4a_e0c
workflow-cps:3853.vb_a_490d892963
workflow-durable-task-step:1331.vc8c2fed35334
workflow-job:1385.vb_58b_86ea_fff1
workflow-multibranch:773.vc4fe1378f1d5
workflow-scm-step:415.v434365564324
workflow-step-api:657.v03b_e8115821b_
workflow-support:865.v43e78cc44e0d
ws-cleanup:0.45
xunit:3.1.3

Is the job you trigger parameterized? If not you don’t need to care, Jenkins will not put the job in the queue again.
If it is parameterized Jenkins will not put it in the queue when the parameters are identical. If parameters are different the job will be added to the queue.
Other than that you can also disallow concurrent execution of the job so it will not run in parallel.

And is the job you trigger freestyle or pipeline?

Having many items in the queue is not a problem for Jenkins, this will not lead to any resource shortage.

Thank you Markus for replying.
Yes, this is a pipeline job that is parameterized. I use the basic “build job” in my pipeline to trigger the automation every x minutes. The issue that I’m seeing is that at the peak hours of usage when our team is using Jenkins heavily for builds, all the agents are occupied and any jobs requested will be queue up at that point. So these periodic jobs will just get queued up, and because our development build cycles (for the developers) take up quite a bit of time, the queue gets pretty large and eventually Jenkins crashes. I can put a safety valve and check the queue size on the periodic pipeline, but ideally, would like to not to put another duplicate job in the queue if I don’t have to. Perhaps I’m doing something wrong with the call to “build job”.

pipeline jobs start immediately normally (unless concurrent execution is disabled and the job is already running) and only when a node step is executed they request an executor. When no executor is available then that particular node step will wait in the queue. So getting that information is a bit trickier

queue = Jenkins.get().queue

queue.items.each{ item ->
	task = item.task 
  	if (task instanceof org.jenkinsci.plugins.workflow.support.steps.ExecutorStepExecution.PlaceholderTask) {
  		println("Job name: " + task.getOwnerExecutable().getParent().getFullName())
	} else {
  		println("Job name: " + task.getFullName())
	}
}

this task can be a job (freestyleproject, but can also be a WorkflowJob (=pipeline job), that is waiting) or can be a ExecutorStepExecution.PlaceholderTask (Pipeline: Nodes and Processes 1331.vc8c2fed35334 API) when it is a node step waiting for an executor.

Thank you Markus, this is VERY helpful. Really appreciate the help.