2020-03-04 09:35:06 +00:00
#!/usr/bin/env bash
2021-10-17 18:13:06 +02:00
# SPDX-License-Identifier: LGPL-2.1-or-later
2021-04-09 19:39:41 +02:00
set -eux
2019-10-08 15:04:29 -07:00
set -o pipefail
2023-05-08 22:38:34 +02:00
# Test oneshot unit restart on failure
2019-10-17 11:06:18 -04:00
# wait this many secs for each test service to succeed in what is being tested
MAX_SECS = 60
2019-10-08 15:04:29 -07:00
systemd-analyze log-level debug
2019-10-17 11:06:18 -04:00
# test one: Restart=on-failure should restart the service
2023-05-08 22:38:34 +02:00
( ! systemd-run --unit= oneshot-restart-one -p Type = oneshot -p Restart = on-failure /bin/bash -c "exit 1" )
2019-10-08 15:04:29 -07:00
2021-04-09 19:50:52 +02:00
for ( ( secs = 0; secs < MAX_SECS; secs++) ) ; do
2023-05-08 22:38:34 +02:00
[ [ " $( systemctl show oneshot-restart-one.service -P NRestarts) " -le 0 ] ] || break
2023-04-05 15:50:42 +02:00
sleep 1
2019-10-17 11:06:18 -04:00
done
2023-05-08 22:38:34 +02:00
if [ [ " $( systemctl show oneshot-restart-one.service -P NRestarts) " -le 0 ] ] ; then
2023-04-05 15:50:42 +02:00
exit 1
2019-10-08 15:04:29 -07:00
fi
2020-03-20 21:59:54 +01:00
TMP_FILE = "/tmp/test-41-oneshot-restart-test"
2019-10-08 15:04:29 -07:00
2020-03-20 21:59:54 +01:00
: >$TMP_FILE
2019-10-08 15:04:29 -07:00
2019-10-17 11:06:18 -04:00
# test two: make sure StartLimitBurst correctly limits the number of restarts
# and restarts execution of the unit from the first ExecStart=
2023-05-08 22:38:34 +02:00
( ! systemd-run --unit= oneshot-restart-two \
2023-04-05 15:50:42 +02:00
-p StartLimitIntervalSec = 120 \
-p StartLimitBurst = 3 \
-p Type = oneshot \
-p Restart = on-failure \
-p ExecStart = " /bin/bash -c \"printf a >> $TMP_FILE \" " /bin/bash -c "exit 1" )
2019-10-08 15:04:29 -07:00
2019-10-17 11:06:18 -04:00
# wait for at least 3 restarts
2021-04-09 19:50:52 +02:00
for ( ( secs = 0; secs < MAX_SECS; secs++) ) ; do
2023-04-05 15:50:42 +02:00
[ [ $( cat $TMP_FILE ) != "aaa" ] ] || break
sleep 1
2019-10-17 11:06:18 -04:00
done
if [ [ $( cat $TMP_FILE ) != "aaa" ] ] ; then
2023-04-05 15:50:42 +02:00
exit 1
2019-10-17 11:06:18 -04:00
fi
2019-10-08 15:04:29 -07:00
2019-10-17 11:06:18 -04:00
# wait for 5 more seconds to make sure there aren't excess restarts
sleep 5
2019-10-08 15:04:29 -07:00
if [ [ $( cat $TMP_FILE ) != "aaa" ] ] ; then
2023-04-05 15:50:42 +02:00
exit 1
2019-10-08 15:04:29 -07:00
fi
systemd-analyze log-level info