diff --git a/NEWS b/NEWS index b7f5eacf55ea77d56b4d6039760b6d0d13295dd5..059910f3094ada8a9c621c43068c3df9ec9eff22 100644 --- a/NEWS +++ b/NEWS @@ -5,6 +5,7 @@ documents those changes that are of interest to users and admins. ============================= -- Remove configuration parameter ShedulerAuth (defunct). -- Add NextJobId to "scontrol show config" output. + -- Add new slurm.conf parameter MailProg. * Changes in SLURM 1.2.0-pre2 ============================= diff --git a/doc/html/configurator.html b/doc/html/configurator.html index d5e7c3c6cdd85be22a4f971dff364d7848e37be0..b6a93a99b6c68edace3beb54449aad5a10e07c6b 100644 --- a/doc/html/configurator.html +++ b/doc/html/configurator.html @@ -72,6 +72,7 @@ function displayfile() "StateSaveLocation=" + document.config.state_save_location.value + "<br>" + "SlurmdSpoolDir=" + document.config.slurmd_spool_dir.value + "<br>" + "SwitchType=switch/" + get_radio_value(document.config.switch_type) + "<br>" + + "#MailProg=/bin/mail <br>" + "MpiDefault=" + get_radio_value(document.config.mpi_default) + "<br>" + "#MessageTimeout= <br>" + "SlurmctldPidFile=" + document.config.slurmctld_pid_file.value + "<br>" + diff --git a/doc/man/man5/slurm.conf.5 b/doc/man/man5/slurm.conf.5 index 304909d33f56550e445b69b7736b7df9fb764421..741cbff561acd4d3b1bfc5c4ee5057ae393906de 100644 --- a/doc/man/man5/slurm.conf.5 +++ b/doc/man/man5/slurm.conf.5 @@ -816,6 +816,10 @@ users from directly using those resources. Possible values are "YES" and "NO". The default value is "NO". .TP +\fBMailProg\fR +Fully qualified pathname to the program used to send email per user request. +The default value is "/bin/mail". +.TP \fBMaxNodes\fR Maximum count of nodes (or base partitions for BlueGene systems) which may be allocated to any single job. diff --git a/slurm/slurm.h.in b/slurm/slurm.h.in index 40e23ac2dde1cf6be02e79795d0a966153bbe87e..31f3bcf386e606f7de67c70e5b1d875584295c1d 100644 --- a/slurm/slurm.h.in +++ b/slurm/slurm.h.in @@ -704,6 +704,7 @@ typedef struct slurm_ctl_conf { char *job_comp_loc; /* job completion logging location */ uint16_t kill_wait; /* seconds between SIGXCPU to SIGKILL * on job termination */ + char *mail_prog; /* pathname of mail program */ uint16_t max_job_cnt; /* maximum number of active jobs */ uint16_t min_job_age; /* COMPLETED jobs over this age (secs) * purged from in memory records */ diff --git a/src/api/config_info.c b/src/api/config_info.c index 61dfbaa3d5a182fd757a47eea332eaa3c0e947be..80cd3eb9a531c1b87465d1022ce55a386ce164f1 100644 --- a/src/api/config_info.c +++ b/src/api/config_info.c @@ -118,6 +118,8 @@ void slurm_print_ctl_conf ( FILE* out, slurm_ctl_conf_ptr->job_credential_public_certificate); fprintf(out, "KillWait = %u\n", slurm_ctl_conf_ptr->kill_wait); + fprintf(out, "MailProg = %s\n", + slurm_ctl_conf_ptr->mail_prog); fprintf(out, "MaxJobCount = %u\n", slurm_ctl_conf_ptr->max_job_cnt); fprintf(out, "MessageTimeout = %u\n", diff --git a/src/common/read_config.c b/src/common/read_config.c index 3e6a453552379e658303ddc3646f48903d8e85fd..16b5368bd152ae96e6410132fef058b58fb9acfe 100644 --- a/src/common/read_config.c +++ b/src/common/read_config.c @@ -1,7 +1,5 @@ /*****************************************************************************\ * read_config.c - read the overall slurm configuration file - * - * $Id$ ***************************************************************************** * Copyright (C) 2002-2006 The Regents of the University of California. * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). @@ -148,6 +146,7 @@ s_p_options_t slurm_conf_options[] = { {"JobCredentialPublicCertificate", S_P_STRING}, {"KillTree", S_P_UINT16, defunct_option}, {"KillWait", S_P_UINT16}, + {"MailProg", S_P_STRING}, {"MaxJobCount", S_P_UINT16}, {"MessageTimeout", S_P_UINT16}, {"MinJobAge", S_P_UINT16}, @@ -919,6 +918,7 @@ free_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr) xfree (ctl_conf_ptr->job_comp_type); xfree (ctl_conf_ptr->job_credential_private_key); xfree (ctl_conf_ptr->job_credential_public_certificate); + xfree (ctl_conf_ptr->mail_prog); xfree (ctl_conf_ptr->mpi_default); xfree (ctl_conf_ptr->plugindir); xfree (ctl_conf_ptr->plugstack); @@ -978,6 +978,7 @@ init_slurm_conf (slurm_ctl_conf_t *ctl_conf_ptr) xfree (ctl_conf_ptr->job_credential_private_key); xfree (ctl_conf_ptr->job_credential_public_certificate); ctl_conf_ptr->kill_wait = (uint16_t) NO_VAL; + xfree (ctl_conf_ptr->mail_prog); ctl_conf_ptr->max_job_cnt = (uint16_t) NO_VAL; ctl_conf_ptr->min_job_age = (uint16_t) NO_VAL; xfree (ctl_conf_ptr->mpi_default); @@ -1341,6 +1342,9 @@ validate_and_set_defaults(slurm_ctl_conf_t *conf, s_p_hashtbl_t *hashtbl) if (!s_p_get_uint16(&conf->kill_wait, "KillWait", hashtbl)) conf->kill_wait = DEFAULT_KILL_WAIT; + if (!s_p_get_string(&conf->mail_prog, "MailProg", hashtbl)) + conf->mail_prog = xstrdup(DEFAULT_MAIL_PROG); + if (!s_p_get_uint16(&conf->max_job_cnt, "MaxJobCount", hashtbl)) conf->max_job_cnt = DEFAULT_MAX_JOB_COUNT; diff --git a/src/common/read_config.h b/src/common/read_config.h index 6709f5d1bdf83bb9c7cb2cab4f7d940263c89920..5f35feb90857f4bac857fbd503fd4f560a909b73 100644 --- a/src/common/read_config.h +++ b/src/common/read_config.h @@ -1,8 +1,6 @@ /***************************************************************************** * read_config.h - definitions for reading the overall slurm configuration * file - * - * $Id$ ***************************************************************************** * Copyright (C) 2002-2006 The Regents of the University of California. * Produced at Lawrence Livermore National Laboratory (cf, DISCLAIMER). @@ -62,6 +60,7 @@ extern char *default_plugstack; #define DEFAULT_JOB_COMP_TYPE "jobcomp/none" #define DEFAULT_KILL_TREE 0 #define DEFAULT_KILL_WAIT 30 +#define DEFAULT_MAIL_PROG "/bin/mail" #define DEFAULT_MAX_JOB_COUNT 2000 #define DEFAULT_MIN_JOB_AGE 300 #define DEFAULT_MPI_DEFAULT "none" diff --git a/src/common/slurm_protocol_defs.c b/src/common/slurm_protocol_defs.c index 76214ad94d6908d9c690f3997c768d5e9c9828de..78751401dab879e22cf61feb45fab4503c777910 100644 --- a/src/common/slurm_protocol_defs.c +++ b/src/common/slurm_protocol_defs.c @@ -811,6 +811,7 @@ void slurm_free_ctl_conf(slurm_ctl_conf_info_msg_t * config_ptr) xfree(config_ptr->job_comp_type); xfree(config_ptr->job_credential_private_key); xfree(config_ptr->job_credential_public_certificate); + xfree(config_ptr->mail_prog); xfree(config_ptr->mpi_default); xfree(config_ptr->plugindir); xfree(config_ptr->proctrack_type); diff --git a/src/common/slurm_protocol_pack.c b/src/common/slurm_protocol_pack.c index 32718f4d029a39ce195d5597dc688903f1a1a5ae..d999de0b1898495167043484da61ea2e6f8f5579 100644 --- a/src/common/slurm_protocol_pack.c +++ b/src/common/slurm_protocol_pack.c @@ -2033,6 +2033,7 @@ _pack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t * build_ptr, Buf buffer) packstr(build_ptr->job_comp_loc, buffer); packstr(build_ptr->job_comp_type, buffer); pack16((uint16_t)build_ptr->kill_wait, buffer); + packstr(build_ptr->mail_prog, buffer); pack16((uint16_t)build_ptr->max_job_cnt, buffer); pack16((uint16_t)build_ptr->min_job_age, buffer); packstr(build_ptr->mpi_default, buffer); @@ -2117,6 +2118,7 @@ _unpack_slurm_ctl_conf_msg(slurm_ctl_conf_info_msg_t ** safe_unpackstr_xmalloc(&build_ptr->job_comp_loc, &uint16_tmp, buffer); safe_unpackstr_xmalloc(&build_ptr->job_comp_type, &uint16_tmp, buffer); safe_unpack16(&build_ptr->kill_wait, buffer); + safe_unpackstr_xmalloc(&build_ptr->mail_prog, &uint16_tmp, buffer); safe_unpack16(&build_ptr->max_job_cnt, buffer); safe_unpack16(&build_ptr->min_job_age, buffer); safe_unpackstr_xmalloc(&build_ptr->mpi_default, &uint16_tmp, buffer); @@ -2194,6 +2196,8 @@ unpack_error: xfree(build_ptr->job_comp_type); xfree(build_ptr->job_credential_private_key); xfree(build_ptr->job_credential_public_certificate); + xfree(build_ptr->mail_prog); + xfree(build_ptr->mpi_default); xfree(build_ptr->plugindir); xfree(build_ptr->plugstack); xfree(build_ptr->proctrack_type); diff --git a/src/slurmctld/agent.c b/src/slurmctld/agent.c index 854d9ecf2c891aed51fcc04a6dda28344f1e97fe..011048cacbc4239e94b19861c4ee63a32f8a09b3 100644 --- a/src/slurmctld/agent.c +++ b/src/slurmctld/agent.c @@ -1456,9 +1456,11 @@ static void _mail_proc(mail_info_t *mi) (void) close(pfd[1]); (void) close(1); (void) close(2); - execle("/bin/mail", "mail", mi->user_name, + execle(slurmctld_conf.mail_prog, "mail", + mi->user_name, "-s", mi->message, NULL, NULL); - error("Failed to exec /bin/mail: %m"); + error("Failed to exec %s: %m", + slurmctld_conf.mail_prog); exit(1); } else { /* parent */ (void) close(pfd[0]); diff --git a/src/slurmctld/controller.c b/src/slurmctld/controller.c index fa95c1733a5dcdfbad548da8387e56c7c2666fe8..1c448122e8206685b2e3ef2129ddbd36247328c2 100644 --- a/src/slurmctld/controller.c +++ b/src/slurmctld/controller.c @@ -172,6 +172,7 @@ int main(int argc, char *argv[]) { int error_code; pthread_attr_t thread_attr_save, thread_attr_sig, thread_attr_rpc; + struct stat stat_buf; /* * Establish initial configuration @@ -200,6 +201,8 @@ int main(int argc, char *argv[]) fatal("Can not set uid to SlurmUser(%d): %m", slurmctld_conf.slurm_user_id); } + if (stat(slurmctld_conf.mail_prog, &stat_buf) != 0) + error("Configured MailProg is invalid"); #ifndef NDEBUG # ifdef PR_SET_DUMPABLE diff --git a/src/slurmctld/proc_req.c b/src/slurmctld/proc_req.c index a490b70a7b6d187be62e8a90354df9113825f060..e733aab958a20d1bd5f823713ff44412d46e424c 100644 --- a/src/slurmctld/proc_req.c +++ b/src/slurmctld/proc_req.c @@ -340,6 +340,7 @@ void _fill_ctld_conf(slurm_ctl_conf_t * conf_ptr) conf_ptr->job_credential_public_certificate = xstrdup(conf-> job_credential_public_certificate); conf_ptr->kill_wait = conf->kill_wait; + conf_ptr->mail_prog = xstrdup(conf->mail_prog); conf_ptr->max_job_cnt = conf->max_job_cnt; conf_ptr->min_job_age = conf->min_job_age; conf_ptr->mpi_default = xstrdup(conf->mpi_default);