示例#1
0
文件: qmsg.c 项目: dkoes/torque
int main(
    
  int    argc,
  char **argv) /* qmsg */

  {
  int c;
  int to_file;
  int errflg = 0;
  int any_failed = 0;

  char job_id[PBS_MAXCLTJOBID];       /* from the command line */

  char job_id_out[PBS_MAXCLTJOBID];
  char server_out[MAXSERVERNAME] = "";
  char rmt_server[MAXSERVERNAME];

#define MAX_MSG_STRING_LEN 256
  char msg_string[MAX_MSG_STRING_LEN+1];

#define GETOPT_ARGS "EO"

  msg_string[0] = '\0';
  to_file = 0;

  while ((c = getopt(argc, argv, GETOPT_ARGS)) != EOF)
    switch (c)
      {

      case 'E':
        to_file |= MSG_ERR;
        break;

      case 'O':
        to_file |= MSG_OUT;
        break;

      default :
        errflg++;
      }

  if (to_file == 0) to_file = MSG_ERR;   /* default */

  if (errflg || ((optind + 1) >= argc))
    {
    static char usage[] =
      "usage: qmsg [-O] [-E] msg_string job_identifier...\n";
    fprintf(stderr,"%s", usage);
    exit(2);
    }

  snprintf(msg_string, sizeof(msg_string), "%s", argv[optind]);

  for (optind++; optind < argc; optind++)
    {
    int connect;
    int stat = 0;
    int located = FALSE;
    std::string server_name;
    std::vector<std::string> id_list;

    snprintf(job_id, sizeof(job_id), "%s", argv[optind]);

    if (get_server_and_job_ids(job_id, id_list, server_name))
      {
      fprintf(stderr, "qmsg: illegally formed job identifier: %s\n", job_id);
      any_failed = 1;
      continue;
      }

    snprintf(server_out, sizeof(server_out), "%s", server_name.c_str());

cnt:

    connect = cnt2server(server_out, false);

    if (connect <= 0)
      {
      any_failed = -1 * connect;

      if (server_out[0] != 0)
        fprintf(stderr, "qmsg: cannot connect to server %s (errno=%d) %s\n",
              server_out, any_failed, pbs_strerror(any_failed));
      else
        fprintf(stderr, "qmsg: cannot connect to server %s (errno=%d) %s\n",
              pbs_server, any_failed, pbs_strerror(any_failed));
      continue;
      }

    for (size_t i = 0; i < id_list.size(); i++)
      {
      snprintf(job_id_out, sizeof(job_id_out), "%s", id_list[i].c_str());
    
      stat = pbs_msgjob_err(connect, job_id_out, to_file, msg_string, NULL, &any_failed);
      
      if (any_failed != PBSE_UNKJOBID)
        break;
      }

    if (stat && (any_failed != PBSE_UNKJOBID))
      {
      prt_job_err("qmsg", connect, job_id_out);
      }
    else if (stat && (any_failed == PBSE_UNKJOBID) && !located)
      {
      located = TRUE;

      if (locate_job(job_id_out, server_out, rmt_server))
        {
        pbs_disconnect(connect);
        strcpy(server_out, rmt_server);
        goto cnt;
        }

      prt_job_err("qmsg", connect, job_id_out);
      }

    pbs_disconnect(connect);
    }

  exit(any_failed);
  }
示例#2
0
int main(

    int    argc,  /* I */
    char **argv)  /* I */

{
    int c;
    int errflg = 0;
    int any_failed = 0;
    int u_cnt, o_cnt, s_cnt;
    char *pc;

    char job_id[PBS_MAXCLTJOBID];       /* from the command line */

    char job_id_out[PBS_MAXCLTJOBID];
    char server_out[MAXSERVERNAME] = "";
    char rmt_server[MAXSERVERNAME];
    char extend[MAXPATHLEN];

#define MAX_HOLD_TYPE_LEN 32
    char hold_type[MAX_HOLD_TYPE_LEN+1];

#define GETOPT_ARGS "h:t:"

    hold_type[0] = '\0';

    while ((c = getopt(argc, argv, GETOPT_ARGS)) != EOF)
    {
        switch (c)
        {

        case 'h':

            while (isspace((int)*optarg))
                optarg++;

            if (strlen(optarg) == 0)
            {
                fprintf(stderr, "qrls: illegal -h value\n");

                errflg++;

                break;
            }

            pc = optarg;

            u_cnt = o_cnt = s_cnt = 0;

            while (*pc)
            {
                if (*pc == 'u')
                    u_cnt++;
                else if (*pc == 'o')
                    o_cnt++;
                else if (*pc == 's')
                    s_cnt++;
                else
                {
                    fprintf(stderr, "qrls: illegal -h value\n");

                    errflg++;

                    break;
                }

                pc++;
            }

            strcpy(hold_type, optarg);

            break;

        case 't':

            pc = optarg;

            if (strlen(pc) == 0)
            {
                fprintf(stderr, "qrls: illegal -t value (array range cannot be zero length)\n");

                errflg++;

                break;
            }

            snprintf(extend,sizeof(extend),"%s%s",
                     ARRAY_RANGE,
                     pc);
            break;

        default:

            errflg++;

            break;
        }
    }

    if (errflg || optind >= argc)
    {
        static char usage[] = "usage: qrls [-h {uos}] [-t array_range] job_identifier...\n";

        fprintf(stderr,"%s", usage);

        exit(2);
    }

    for (; optind < argc; optind++)
    {
        int connect;
        int stat = 0;
        int located = FALSE;
        std::string server_name;
        std::vector<std::string> id_list;

        snprintf(job_id, sizeof(job_id), "%s", argv[optind]);

        if (get_server_and_job_ids(job_id, id_list, server_name))
        {
            fprintf(stderr, "qrls: illegally formed job identifier: %s\n",
                    job_id);

            any_failed = 1;

            continue;
        }

        snprintf(server_out, sizeof(server_out), "%s", server_name.c_str());

cnt:

        connect = cnt2server(server_out);

        if (connect <= 0)
        {
            any_failed = -1 * connect;

            if (server_out[0] != 0)
                fprintf(stderr, "qrls: cannot connect to server %s (errno=%d) %s\n",
                        server_out,
                        any_failed,
                        pbs_strerror(any_failed));
            else
                fprintf(stderr, "qrls: cannot connect to server %s (errno=%d) %s\n",
                        pbs_server,
                        any_failed,
                        pbs_strerror(any_failed));

            continue;
        }

        for (size_t i = 0; i < id_list.size(); i++)
        {
            snprintf(job_id_out, sizeof(job_id_out), "%s", id_list[i].c_str());

            stat = pbs_rlsjob_err(connect, job_id_out, hold_type, extend, &any_failed);

            if (any_failed != PBSE_UNKJOBID)
                break;
        }

        if (stat &&
                (any_failed != PBSE_UNKJOBID))
        {
            if (!located)
            {
                located = TRUE;

                if (locate_job(job_id_out, server_out, rmt_server))
                {
                    pbs_disconnect(connect);

                    strcpy(server_out, rmt_server);

                    goto cnt;
                }
            }

            prt_job_err("qrls", connect, job_id_out);
        }

        pbs_disconnect(connect);
    }  /* END for () */

    exit(any_failed);

    /*NOTREACHED*/

    return(0);
}  /* END main() */