Lines Matching refs:svc

88     snprintf(pname, sizeof(pname), "init.svc.%s", name);
154 void service_start(struct service *svc, const char *dynamic_args)
167 svc->flags &= (~(SVC_DISABLED|SVC_RESTARTING|SVC_RESET|SVC_RESTART));
168 svc->time_started = 0;
175 if (svc->flags & SVC_RUNNING) {
179 needs_console = (svc->flags & SVC_CONSOLE) ? 1 : 0;
181 ERROR("service '%s' requires console\n", svc->name);
182 svc->flags |= SVC_DISABLED;
186 if (stat(svc->args[0], &s) != 0) {
187 ERROR("cannot find '%s', disabling '%s'\n", svc->args[0], svc->name);
188 svc->flags |= SVC_DISABLED;
192 if ((!(svc->flags & SVC_ONESHOT)) && dynamic_args) {
194 svc->args[0]);
195 svc->flags |= SVC_DISABLED;
200 if (svc->seclabel) {
201 scon = strdup(svc->seclabel);
203 ERROR("Out of memory while starting '%s'\n", svc->name);
209 INFO("computing context for service '%s'\n", svc->args[0]);
212 ERROR("could not get context while starting '%s'\n", svc->name);
216 rc = getfilecon(svc->args[0], &fcon);
218 ERROR("could not get context while starting '%s'\n", svc->name);
227 ERROR("could not get context while starting '%s'\n", svc->name);
233 NOTICE("starting '%s'\n", svc->name);
250 for (ei = svc->envvars; ei; ei = ei->next)
255 for (si = svc->sockets; si; si = si->next) {
270 if (svc->ioprio_class != IoSchedClass_NONE) {
271 if (android_set_ioprio(getpid(), svc->ioprio_class, svc->ioprio_pri)) {
273 getpid(), svc->ioprio_class, svc->ioprio_pri, strerror(errno));
285 for (n = 0; svc->args[n]; n++) {
286 INFO("args[%d] = '%s'\n", n, svc->args[n]);
296 if (svc->gid) {
297 if (setgid(svc->gid) != 0) {
302 if (svc->nr_supp_gids) {
303 if (setgroups(svc->nr_supp_gids, svc->supp_gids) != 0) {
308 if (svc->uid) {
309 if (setuid(svc->uid) != 0) {
314 if (svc->seclabel) {
315 if (is_selinux_enabled() > 0 && setexeccon(svc->seclabel) < 0) {
316 ERROR("cannot setexeccon('%s'): %s\n", svc->seclabel, strerror(errno));
322 if (execve(svc->args[0], (char**) svc->args, (char**) ENV) < 0) {
323 ERROR("cannot execve('%s'): %s\n", svc->args[0], strerror(errno));
327 int arg_idx = svc->nargs;
333 memcpy(arg_ptrs, svc->args, (svc->nargs * sizeof(char *)));
341 execve(svc->args[0], (char**) arg_ptrs, (char**) ENV);
349 ERROR("failed to start '%s'\n", svc->name);
350 svc->pid = 0;
354 svc->time_started = gettime();
355 svc->pid = pid;
356 svc->flags |= SVC_RUNNING;
359 notify_service_state(svc->name, "running");
363 static void service_stop_or_reset(struct service *svc, int how)
367 svc->flags &= (~SVC_RESTARTING);
377 svc->flags |= (svc->flags & SVC_RC_DISABLED) ? SVC_DISABLED : SVC_RESET;
379 svc->flags |= how;
382 if (svc->pid) {
383 NOTICE("service '%s' is being killed\n", svc->name);
384 kill(-svc->pid, SIGKILL);
385 notify_service_state(svc->name, "stopping");
387 notify_service_state(svc->name, "stopped");
391 void service_reset(struct service *svc)
393 service_stop_or_reset(svc, SVC_RESET);
396 void service_stop(struct service *svc)
398 service_stop_or_reset(svc, SVC_DISABLED);
401 void service_restart(struct service *svc)
403 if (svc->flags & SVC_RUNNING) {
405 service_stop_or_reset(svc, SVC_RESTART);
406 } else if (!(svc->flags & SVC_RESTARTING)) {
408 service_start(svc, NULL);
418 static void restart_service_if_needed(struct service *svc)
420 time_t next_start_time = svc->time_started + 5;
423 svc->flags &= (~SVC_RESTARTING);
424 service_start(svc, NULL);
443 struct service *svc = NULL;
448 svc = service_find_by_name(name);
456 svc = service_find_by_name(tmp);
460 if (svc) {
461 service_start(svc, args);
471 struct service *svc = service_find_by_name(name);
473 if (svc) {
474 service_stop(svc);
482 struct service *svc = service_find_by_name(name);
484 if (svc) {
485 service_restart(svc);