So, the last question I have is, what is the effect of using a zero instead of the flags? Sorry if everybody else already knows this, but if there is a flag that says "temporary", I would suppose that not using it means "permanent". Likewise, I would suppose that not using the "immediate" flag means "later". So, what is the difference between using and not using these flags?
Tony Nguyen wrote: > FYI, Brian used 0 instead of those flags and it solved the problem. A > quick look at the code suggests that we probably don't using > SMF_IMMEDIATE or SMF_TEMPORARY flags. In svcadm.c, > > while ((o = getopt(argc, argv, "It")) != -1) { > if (o == 'I') > flags |= MARK_IMMEDIATE; > else if (o == 't') > flags |= MARK_TEMPORARY; > else if (o == '?') > usage(); > ...... > ...... > } else if (strcmp(argv[optind], "maintenance") == 0) { > callback = force_maintenance; > } else { > usage(); > } > > if ((err = scf_walk_fmri(h, argc - optind - 1, > argv + optind + 1, 0, callback, NULL, &exit_status, > uu_warn)) != 0) { > > The 6th argument, NULL value, is what we use to call force_maintenance. > As the result, force_maintenance always calls set_inst_action with > SCF_PROPERTY_MAINT_ON which is the same if we call smf_maintain_instance > with 0 flag. Below are snippets from force_maintenance and > smf_maintain_instance > > force_maintenance() > .... > if (flags & MARK_IMMEDIATE) { > prop = (flags & MARK_TEMPORARY) ? > SCF_PROPERTY_MAINT_ON_IMMTEMP : > SCF_PROPERTY_MAINT_ON_IMMEDIATE; > } else { > prop = (flags & MARK_TEMPORARY) ? > SCF_PROPERTY_MAINT_ON_TEMPORARY : > SCF_PROPERTY_MAINT_ON; > } > > set_inst_action(wip->fmri, wip->inst, prop); > > smf_maintain_instance() > ... > if (flags & SMF_TEMPORARY) > return (set_inst_action(instance, > (flags & SMF_IMMEDIATE) ? > SCF_PROPERTY_MAINT_ON_IMMTEMP : > SCF_PROPERTY_MAINT_ON_TEMPORARY)); > else > return (set_inst_action(instance, > (flags & SMF_IMMEDIATE) ? > SCF_PROPERTY_MAINT_ON_IMMEDIATE : > SCF_PROPERTY_MAINT_ON)); > > I'll file a bug so we can further investigate the issue. > -tony > > Brian Utterback wrote: >> Notice that my first attempt did not use SMF_IMMEDIATE. I just added >> that hopefully. I have now removed it again. >> >> The output of svcs -l is: >> >> # svcs -l ntp >> fmri svc:/network/ntp:default >> name Network Time Protocol (NTP) >> enabled true >> state online >> next_state none >> state_time Tue May 01 09:59:39 2007 >> logfile /var/svc/log/network-ntp:default.log >> restarter svc:/system/svc/restarter:default >> contract_id 228 >> dependency require_all/error file://localhost/usr/sbin/ntpq (online) >> file://localhost/usr/sbin/ntpdate (online) >> dependency require_any/error svc:/network/service (online) >> >> >> The /var/svc/log/network-ntp:default.log has no entries in it from after >> the startup. The last line is: >> [ May 1 09:59:39 Method "start" exited with status 0 ] >> >> >> >> David Bustos wrote: >>> Quoth Brian Utterback on Tue, May 01, 2007 at 12:26:03PM -0400: >>>> Okay, I tried that, and smf never kills the process nor even puts it >>>> into maintenance status. Here is the code I have: >>>> >>>> /* enter the maintenance mode */ >>>> if ((fmri = getenv("SMF_FMRI")) != NULL) { >>>> if (0 > smf_maintain_instance(fmri, >>>> SMF_TEMPORARY|SMF_IMMEDIATE)) { >>>> >>>> printf("smf_maintain_instance:%s\n",scf_error()); >>>> exit(1); >>>> } >>>> /* sleep until SMF kills us */ >>>> while (1) { >>>> pause(); >>>> } >>>> } >>> >>> Don't use _IMMEDIATE. What does "svcs -l" report while you're sleeping? >>> What does your /var/svc/log file say? >>> >>> >>> David >> > -- blu "When Congress started Daylight Savings Time earlier, did they even consider what affect an extra hour of daylight would have on global warming? Well, did they?" ---------------------------------------------------------------------- Brian Utterback - Solaris RPE, Sun Microsystems, Inc. Ph:877-259-7345, Em:brian.utterback-at-ess-you-enn-dot-kom