Magellan Linux

Contents of /trunk/include/systemd.minc

Parent Directory Parent Directory | Revision Log Revision Log


Revision 64 - (show annotations) (download)
Wed Oct 9 13:02:57 2013 UTC (10 years, 6 months ago) by niro
File size: 5152 byte(s)
-split mtools.minc into systemd.minc and sysvinit.minc
1 # $Id$
2
3 # adds systemd units to runlevels and starts them
4 # mstartunit service {/path/to/service_exec}
5 mstartunit()
6 {
7 local service="$1"
8 local service_exec="$2"
9 local opts
10 local chroot
11
12 # only run if systemd was found
13 if [[ ! -x /bin/systemctl ]] && [[ ! -x /usr/bin/systemctl ]]
14 then
15 echo "systemd not found, not adding unit ${service} to runlevels!"
16 return
17 fi
18
19 # don't run if feature !autosvc was set
20 if mqueryfeature "!autosvc"
21 then
22 echo "!autosvc detected; auto management of services disabled."
23 return
24 fi
25
26 if [[ ${MROOT} != / ]] && [[ ! -z ${MROOT} ]]
27 then
28 # symlinks root path too, not exactly what we want
29 #opts="--root ${MROOT}"
30 if [ -x $(type -P systemd-nspawn) ]
31 then
32 chroot="$(type -P systemd-nspawn)"
33 else
34 chroot="chroot"
35 fi
36 fi
37
38 if [[ -z ${service_exec} ]]
39 then
40 case ${service} in
41 *.service) service_exec="$(which ${service%%.service} 2> /dev/null)" ;;
42 *.socket) service_exec="$(which ${service%%.socket} 2> /dev/null)" ;;
43 *.mount) service_exec="$(which ${service%%.mount} 2> /dev/null)" ;;
44 *.target) service_exec="$(which ${service%%.target} 2> /dev/null)" ;;
45 *) service_exec="$(which ${service} 2> /dev/null)" ;;
46 esac
47 fi
48
49 # add service to default runlevels
50 echo -e " ${COLBLUE}[${COLGREEN}+${COLBLUE}]${COLDEFAULT} adding unit ${service} to default runlevels ..."
51 # reload daemon to honor changed unit files
52 if [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
53 then
54 systemctl ${opts} daemon-reload
55 fi
56 ${chroot} systemctl ${opts} enable ${service}
57
58 # do not start services on bootstrap or MROOT!=/
59 if [[ ${MAGE_BOOTSTRAP} != true ]] && [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
60 then
61 echo -e " ${COLBLUE}[${COLGREEN}+${COLBLUE}]${COLDEFAULT} starting unit ${service} ..."
62 # start or restart the service
63 # dont use try-restart, works only with active services!
64 systemctl restart ${service}
65 fi
66 }
67
68 # removes systemd units from runlevels and stops them
69 # mstopunit service {/path/to/service_exec}
70 mstopunit()
71 {
72 local service="$1"
73 local service_exec="$2"
74 local opts
75
76 # only run if systemd was found
77 if [[ ! -x /bin/systemctl ]] && [[ ! -x /usr/bin/systemctl ]]
78 then
79 echo "systemd not found, not removing unit ${service} from runlevels!"
80 return
81 fi
82
83 # don't run if feature !autosvc was set
84 if mqueryfeature "!autosvc"
85 then
86 echo "!autosvc detected; auto management of services disabled."
87 return
88 fi
89
90 if [[ ${MROOT} != / ]] && [[ ! -z ${MROOT} ]]
91 then
92 opts="--root ${MROOT}"
93 fi
94
95 if [[ -z ${service_exec} ]]
96 then
97 case ${service} in
98 *.service) service_exec="$(which ${service%%.service} 2> /dev/null)" ;;
99 *.socket) service_exec="$(which ${service%%.socket} 2> /dev/null)" ;;
100 *.mount) service_exec="$(which ${service%%.mount} 2> /dev/null)" ;;
101 *.target) service_exec="$(which ${service%%.target} 2> /dev/null)" ;;
102 *) service_exec="$(which ${service} 2> /dev/null)" ;;
103 esac
104 elif [[ x$(basename ${service_exec}) = x${service_exec} ]]
105 then
106 # expand full path
107 service_exec="$(which ${service_exec})"
108 fi
109
110 # only stop the service if ${service_exec} does not exist
111 [[ -x ${MROOT}/${service_exec} ]] && return
112
113 # del services from runlevel regardless if they exist or not
114 echo -e " ${COLBLUE}[${COLRED}-${COLBLUE}]${COLDEFAULT} removing unit ${service} from default runlevels ..."
115 # reload daemon to honor changed unit files
116 systemctl ${opts} daemon-reload
117 systemctl ${opts} disable ${service}
118
119 # do not stop services on bootstrap or MROOT!=/
120 if [[ ${MAGE_BOOTSTRAP} != true ]] && [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
121 then
122 echo -e " ${COLBLUE}[${COLGREEN}+${COLBLUE}]${COLDEFAULT} stopping unit ${service} ..."
123 systemctl stop ${service}
124 # try harder
125 if [[ -n $(pidof ${service_exec}) ]]
126 then
127 killall -15 ${service_exec} &> /dev/null
128 sleep 1
129 killall -9 ${service_exec} &> /dev/null
130 fi
131 fi
132 }
133
134 # reloads a systemd unit if already running
135 # mreloadunit service {/path/to/service_exec}
136 mreloadunit()
137 {
138 local service="$1"
139 local service_exec="$2"
140 local opts
141
142 # only run if systemd was found
143 if [[ ! -x /bin/systemctl ]] && [[ ! -x /usr/bin/systemctl ]]
144 then
145 echo "systemd not found, not removing unit ${service} from runlevels!"
146 return
147 fi
148
149 # don't run if feature !autosvc was set
150 if mqueryfeature "!autosvc"
151 then
152 echo "!autosvc detected; auto management of services disabled."
153 return
154 fi
155
156 if [[ ${MROOT} != / ]] && [[ ! -z ${MROOT} ]]
157 then
158 opts="--root ${MROOT}"
159 fi
160
161 if [[ -z ${service_exec} ]]
162 then
163 case ${service} in
164 *.service) service_exec="$(which ${service%%.service} 2> /dev/null)" ;;
165 *.socket) service_exec="$(which ${service%%.socket} 2> /dev/null)" ;;
166 *.mount) service_exec="$(which ${service%%.mount} 2> /dev/null)" ;;
167 *.target) service_exec="$(which ${service%%.target} 2> /dev/null)" ;;
168 *) service_exec="$(which ${service} 2> /dev/null)" ;;
169 esac
170 fi
171
172 # reload daemon to honor changed unit files
173 systemctl ${opts} daemon-reload
174
175 # do not stop services on bootstrap or MROOT!=/
176 if [[ ${MAGE_BOOTSTRAP} != true ]] && [[ -z ${MROOT} ]] || [[ ${MROOT} = / ]]
177 then
178 # only reload the service if running
179 systemctl reload-or-try-restart ${service}
180 fi
181 }