Need to restart Jenkins service programmatically on a schedule

Posting this here for others that come here from Google. You can add a job to Jenkins to restart itself using the CLI. Add a job with a shell step to execute:

java -jar "$JENKINS_HOME/war/WEB-INF/jenkins-cli.jar" -s "$JENKINS_URL" safe-restart

If the above CLI method did not work (in my case it failed on: hudson.security.AccessDeniedException2: anonymous is missing the Overall/Read permission)

You can create a Groovy plugin build step and "Execute a system Groovy script":

import hudson.model.*;
Hudson.instance.doSafeRestart(null);

or the new Jenkins instance

import jenkins.model.*
Jenkins.instance.doSafeRestart(null);

Then, you can set this job to be triggered by schedule. For example, to restart Jenkins daily on midnight, set "Build periodically": H 00 * * *