[systemd-devel] Schedule reboot in *.service file
Jeffrey Walton
noloader at gmail.com
Wed May 15 19:53:44 UTC 2019
Hi Everyone,
I have a systemd timer that fires early in the morning. The timer
starts a systemd service, and the service checks for updates using the
package manager. If updates are found then they are applied. The
service runs fine and is shown below.
The tail of the service schedules a reboot of the machine at +10
minutes when updates are applied. The reboot clears a UI widget that
confuses my users and loads the latest components upon reboot.
The reboot is not happening. When I inspected the systemd logs I see
that it was supposed to happen. When I check the user's desktop that
damn useless UI widget is present nagging about installing updates.
How do I schedule a reboot using systemd service file?
Thanks in advance.
=========================
$ cat /etc/systemd/system/system-update.service
[Unit]
Description=Update the system once a day without user prompts
[Service]
Type=oneshot
ExecStart=/usr/sbin/system-update
Wants=system-update.timer
[Install]
WantedBy=system-update.target
=========================
$ cat /usr/sbin/system-update
#!/usr/bin/env bash
PATH=/sbin:/usr/sbin:/bin:/usr/bin
# Update the package lists
if apt-get update &>/dev/null
then
echo "Updated package list"
else
echo "Failed to update package list"
[[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1
fi
# If no packages are upgradeable, then the message is "Listing... Done".
# Otherwise a package name is listed as upgradeable.
COUNT=$(apt list --upgradable 2>/dev/null | grep -v 'Listing' | wc -l)
# Only update and reboot if packages are available
if [[ "$COUNT" -gt 0 ]]
then
if apt-get dist-upgrade -y &>/dev/null
then
echo "Upgraded system"
else
echo "Failed to upgrade system"
[[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 1 || return 1
fi
echo "Purging old packages"
apt autoremove --purge &>/dev/null
NEEDS_REBOOT=1
fi
if [[ -f /var/run/reboot-required ]]
then
NEEDS_REBOOT=1
fi
if [[ "$NEEDS_REBOOT" -eq 1 ]]
then
echo "Scheduling reboot in 10 minutes"
reboot -r 10
fi
[[ "$0" = "${BASH_SOURCE[0]}" ]] && exit 0 || return 0
=========================
$ systemctl status system-update.service
? system-update.service - Update the system once a day without user prompts
Loaded: loaded (/etc/systemd/system/system-update.service; enabled; vendor pr
Active: inactive (dead) since Wed 2019-05-15 05:03:59 EDT; 10h ago
Process: 17218 ExecStart=/usr/sbin/system-update (code=exited, status=0/SUCCES
Main PID: 17218 (code=exited, status=0/SUCCESS)
May 15 05:01:28 qotom systemd[1]: Starting Update the system once a day without
May 15 05:01:34 qotom system-update[17218]: Updated package list
May 15 05:03:58 qotom system-update[17218]: Upgraded system
May 15 05:03:58 qotom system-update[17218]: Purging old packages
May 15 05:03:59 qotom system-update[17218]: Scheduling reboot in 10 minutes
May 15 05:03:59 qotom systemd[1]: Started Update the system once a day without u
More information about the systemd-devel
mailing list