blob: 20d2d2b173302dee3992178925c9185a73711556 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
|
#!/usr/bin/env bash
# SPDX-License-Identifier: LGPL-2.1-or-later
set -eux
set -o pipefail
# Test OnSuccess= + Uphold= + PropagatesStopTo= + BindsTo=
systemd-analyze log-level debug
systemd-analyze log-target journal
# Idea is this:
# 1. we start TEST-23-UNIT-FILE-success.service
# 2. which through OnSuccess= starts TEST-23-UNIT-FILE-fail.service,
# 3. which through OnFailure= starts TEST-23-UNIT-FILE-uphold.service,
# 4. which through Uphold= starts/keeps TEST-23-UNIT-FILE-short-lived.service running,
# 5. which will sleep 1s when invoked, and on the 5th invocation send us a SIGUSR1
# 6. once we got that we finish cleanly
sigusr1=0
trap sigusr1=1 SIGUSR1
trap -p SIGUSR1
systemctl start TEST-23-UNIT-FILE-success.service
while [ "$sigusr1" -eq 0 ] ; do
sleep .5
done
systemctl stop TEST-23-UNIT-FILE-uphold.service
systemctl enable TEST-23-UNIT-FILE-upheldby-install.service
# Idea is this:
# 1. we start TEST-23-UNIT-FILE-retry-uphold.service
# 2. which through Uphold= starts TEST-23-UNIT-FILE-retry-upheld.service
# 3. which through Requires= starts TEST-23-UNIT-FILE-retry-fail.service
# 4. which fails as /tmp/TEST-23-UNIT-FILE-retry-fail does not exist, so TEST-23-UNIT-FILE-retry-upheld.service
# is no longer restarted
# 5. we create /tmp/TEST-23-UNIT-FILE-retry-fail
# 6. now TEST-23-UNIT-FILE-retry-upheld.service will be restarted since upheld, and its dependency will
# be satisfied
rm -f /tmp/TEST-23-UNIT-FILE-retry-fail
systemctl start TEST-23-UNIT-FILE-retry-uphold.service
systemctl is-active TEST-23-UNIT-FILE-upheldby-install.service
until systemctl is-failed TEST-23-UNIT-FILE-retry-fail.service ; do
sleep .5
done
(! systemctl is-active TEST-23-UNIT-FILE-retry-upheld.service)
touch /tmp/TEST-23-UNIT-FILE-retry-fail
until systemctl is-active TEST-23-UNIT-FILE-retry-upheld.service ; do
sleep .5
done
systemctl stop TEST-23-UNIT-FILE-retry-uphold.service TEST-23-UNIT-FILE-retry-fail.service TEST-23-UNIT-FILE-retry-upheld.service
# Idea is this:
# 1. we start TEST-23-UNIT-FILE-prop-stop-one.service
# 2. which through Wants=/After= pulls in TEST-23-UNIT-FILE-prop-stop-two.service as well
# 3. TEST-23-UNIT-FILE-prop-stop-one.service then sleeps indefinitely
# 4. TEST-23-UNIT-FILE-prop-stop-two.service sleeps a short time and exits
# 5. the StopPropagatedFrom= dependency between the two should ensure *both* will exit as result
# 6. an ExecStopPost= line on TEST-23-UNIT-FILE-prop-stop-one.service will send us a SIGUSR2
# 7. once we got that we finish cleanly
sigusr2=0
trap sigusr2=1 SIGUSR2
systemctl start TEST-23-UNIT-FILE-prop-stop-one.service
while [ "$sigusr2" -eq 0 ] ; do
sleep .5
done
# Idea is this:
# 1. we start TEST-23-UNIT-FILE-binds-to.service
# 2. which through BindsTo=/After= pulls in TEST-23-UNIT-FILE-bound-by.service as well
# 3. TEST-23-UNIT-FILE-bound-by.service suddenly dies
# 4. TEST-23-UNIT-FILE-binds-to.service should then also be pulled down (it otherwise just hangs)
# 6. an ExecStopPost= line on TEST-23-UNIT-FILE-binds-to.service will send us a SIGRTMIN1+1
# 7. once we got that we finish cleanly
sigrtmin1=0
trap sigrtmin1=1 SIGRTMIN+1
systemctl start TEST-23-UNIT-FILE-binds-to.service
while [ "$sigrtmin1" -eq 0 ] ; do
sleep .5
done
systemd-analyze log-level info
|