0001-daemonize-mm_sched.patch

Daemonize mm_sched. - Lars Kellogg-Stedman, 05/02/2011 03:00 PM

Download (4.12 KB)

View differences:

share/scripts/one
146 146
        #  [-h host dispatch]  max number of VMs dispatched to a given host in each
147 147
        #                      scheduling action - default: 1
148 148

  
149
    $ONE_SCHEDULER -p $PORT -t 30 -m 300 -d 30 -h 1&
149
    $ONE_SCHEDULER -f -p $PORT -t 30 -m 300 -d 30 -h 1&
150 150

  
151 151
    LASTRC=$?
152 152
    LASTPID=$!
src/scheduler/src/sched/mm_sched.cc
65 65
int main(int argc, char **argv)
66 66
{
67 67
    RankScheduler * ss;
68
    int             port = 2633;
69 68
    time_t          timer= 30;
69
    unsigned int    port = 2633;
70 70
    unsigned int    machines_limit = 300;
71 71
    unsigned int    dispatch_limit = 30;
72 72
    unsigned int    host_dispatch_limit = 1;
73
    unsigned int    foreground = 0;
73 74
    char            opt;
75
    char            *pidfile_name = NULL;
74 76

  
75
    ostringstream  oss;
77
    ofstream        pidfile;
78
    ostringstream   oss;
76 79

  
77
    while((opt = getopt(argc,argv,"p:t:m:d:h:")) != -1)
80
    while((opt = getopt(argc,argv,"fP:p:t:m:d:h:")) != -1)
78 81
    {
79 82
        switch(opt)
80 83
        {
84
            case 'f':
85
                foreground = 1;
86
                break;
87
            case 'P':
88
                pidfile_name = strdup(optarg);
89
                break;
81 90
            case 'p':
82 91
                port = atoi(optarg);
83 92
                break;
......
94 103
                host_dispatch_limit = atoi(optarg);
95 104
                break;
96 105
            default:
97
                cerr << "usage: " << argv[0] << " [-p port] [-t timer] ";
106
                cerr << "usage: " << argv[0] << " [ -f ] [ -P pidfile ] [-p port] [-t timer] ";
98 107
                cerr << "[-m machines limit] [-d dispatch limit] [-h host_dispatch_limit]\n";
99 108
                exit(-1);
100 109
                break;
......
103 112

  
104 113
    /* ---------------------------------------------------------------------- */
105 114

  
115
    if (! foreground) {
116
        pid_t pid, sid;
117

  
118
        /* Fork off the parent process */
119
        pid = fork();
120
        if (pid < 0) {
121
            cerr << "fork() failed.\n";
122
            exit(1);
123
        }
124
        /* If we got a good PID, then
125
           we can exit the parent process. */
126
        if (pid > 0) {
127
            exit(0);
128
        }
129

  
130
        if (pidfile_name) {
131
            pid = getpid();
132
            pidfile.open(pidfile_name);
133

  
134
            if (! pidfile.is_open()) {
135
                cerr << "failed to write pid file.\n";
136
                exit(1);
137
            }
138
            pidfile << pid << "\n";
139
            pidfile.close();
140
        }
141
 
142
        /* Change the file mode mask */
143
        umask(0);
144
 
145
        /* Create a new SID for the child process */
146
        sid = setsid();
147
        if (sid < 0) {
148
            /* Log the failure */
149
            cerr << "setsid() failed.\n";
150
            exit(1);
151
        }
152
 
153
        /* Change the current working directory */
154
        if ((chdir("/")) < 0) {
155
            /* Log the failure */
156
            cerr << "chdir() failed.\n";
157
            exit(1);
158
        }
159
 
160
        /* Close out the standard file descriptors */
161
        close(0);
162
        close(1);
163
        close(2);
164
    }
165

  
166
    /* ---------------------------------------------------------------------- */
167

  
106 168
    oss << "http://localhost:" << port << "/RPC2";
107 169

  
108 170
    ss = new RankScheduler(oss.str(),
109
-