Hi Alexandre,

With this patch ceph-osd -f will try to create the default pid file : this is a 
non backward compatible change. Maybe there is a way for systemd to capture the 
pid of the process and store it instead of requiring the deamon to create the 
pid file ?

Cheers

On 31/07/2014 08:08, Alexandre Oliva wrote:
> systemd wants to run daemons in foreground, but daemons wouldn't write
> out the pid file with -f.  Fixed.
> 
> Signed-off-by: Alexandre Oliva <ol...@gnu.org>
> ---
>  src/ceph_mon.cc           |    3 +--
>  src/common/config.cc      |    2 --
>  src/global/global_init.cc |   10 +++++++++-
>  3 files changed, 10 insertions(+), 5 deletions(-)
> 
> diff --git a/src/ceph_mon.cc b/src/ceph_mon.cc
> index 4e84b4d..14dd6da 100644
> --- a/src/ceph_mon.cc
> +++ b/src/ceph_mon.cc
> @@ -406,8 +406,7 @@ int main(int argc, const char **argv)
>    // screwing us over
>    Preforker prefork;
>    if (!(flags & CINIT_FLAG_NO_DAEMON_ACTIONS)) {
> -    if (g_conf->daemonize) {
> -      global_init_prefork(g_ceph_context, 0);
> +    if (global_init_prefork(g_ceph_context, 0) >= 0) {
>        prefork.prefork();
>        if (prefork.is_parent()) {
>       return prefork.parent_wait();
> diff --git a/src/common/config.cc b/src/common/config.cc
> index 0ee7f58..4e3b6fe 100644
> --- a/src/common/config.cc
> +++ b/src/common/config.cc
> @@ -389,12 +389,10 @@ int md_config_t::parse_argv(std::vector<const char*>& 
> args)
>      }
>      else if (ceph_argparse_flag(args, i, "--foreground", "-f", (char*)NULL)) 
> {
>        set_val_or_die("daemonize", "false");
> -      set_val_or_die("pid_file", "");
>      }
>      else if (ceph_argparse_flag(args, i, "-d", (char*)NULL)) {
>        set_val_or_die("daemonize", "false");
>        set_val_or_die("log_file", "");
> -      set_val_or_die("pid_file", "");
>        set_val_or_die("log_to_stderr", "true");
>        set_val_or_die("err_to_stderr", "true");
>        set_val_or_die("log_to_syslog", "false");
> diff --git a/src/global/global_init.cc b/src/global/global_init.cc
> index 7b20343..f03677c 100644
> --- a/src/global/global_init.cc
> +++ b/src/global/global_init.cc
> @@ -166,8 +166,16 @@ int global_init_prefork(CephContext *cct, int flags)
>    if (g_code_env != CODE_ENVIRONMENT_DAEMON)
>      return -1;
>    const md_config_t *conf = cct->_conf;
> -  if (!conf->daemonize)
> +  if (!conf->daemonize) {
> +    if (atexit(pidfile_remove_void)) {
> +      derr << "global_init_daemonize: failed to set pidfile_remove function "
> +        << "to run at exit." << dendl;
> +    }
> +
> +    pidfile_write(g_conf);
> +
>      return -1;
> +  }
>  
>    // stop log thread
>    g_ceph_context->_log->flush();
> 

-- 
Loïc Dachary, Artisan Logiciel Libre

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to