Script tasks behave exactly like service tasks. Both task types are based on jobs and job workers. The differences between these task types are the visual representation (i.e. the task marker) and the semantics for the model.
When a process instance enters a script task then it creates a corresponding job and wait for its completion. A job worker should request jobs of this job type and process them. When the job is completed then the process instance continues.
Jobs for script tasks are not processed by Zeebe itself. In order to process them, you need to provide a job worker.
A script task must define a job type. It specifies
the type of job that workers should subscribe to (e.g.
Use task headers to pass static parameters to the job worker (e.g. the script to evaluate).
Define variable mappings to transform the variables that are passed to the job worker, or to customize how the variables of the job are merged in the process instance.
Have a look at the Zeebe Script Worker. It's a community extension that provides a job worker to evaluate scripts. You can run it, or use it as a blueprint for your own job worker.
A script task with a custom header: