]> mj.ucw.cz Git - bex.git/commitdiff
prun: use tmux instead of GNU screen, added --debug-children
authorMartin Mares <mj@ucw.cz>
Thu, 16 Feb 2012 15:21:10 +0000 (16:21 +0100)
committerMartin Mares <mj@ucw.cz>
Thu, 16 Feb 2012 15:21:10 +0000 (16:21 +0100)
lib/bin/bex-prun

index 4900ef24db5b6bb8bf3fd0e6f766ca823dc31a05..3fc36dd868ce5015850d82f90321a6dd6f94387b 100755 (executable)
@@ -10,34 +10,33 @@ use POSIX;
 use BEX;
 
 my $queue_name;
-my $screen_session = 'BEX';
 my $text_mode;
+my $debug_children;
 
 sub usage() {
        print <<AMEN ;
 Usage: bex prun [<options>] [[!]<machine-or-class> ...]
 
 Options:
+    --debug-children   Log stdout and stderr to ./debug.log
 -q, --queue=<name>     Run jobs in the given queue
-    --session=<name>   Job windows should be opened within the given screen
-                       session (default: BEX)
-    --text             Use textual user interface instead of curses
+    --text             Use plain-text user interface instead of curses
 AMEN
        exit 0;
 }
 
 GetOptions(
        "q|queue=s" => \$queue_name,
-       "session=s" => \$screen_session,
        "text!" => \$text_mode,
+       "debug-children!" => \$debug_children,
        "help" => \&usage,
 ) or die "Try `bex prun --help' for more information.\n";
 
-system 'screen', '-S', $screen_session, '-X', 'select', '.';
-!$? or die "Screen session $screen_session not found\n";
+system 'tmux', 'has-session';
+!$? or die "You need to start tmux first.\n";
 
 my $queue = BEX::Queue->new($queue_name);
-my $fifo_name = $queue->{'Name'} . '/status-fifo';
+my $fifo_name = $queue->{'Path'} . '/status-fifo';
 unlink $fifo_name;
 mkfifo $fifo_name, 0700 or die "Cannot create $fifo_name: $!";
 open FIFO, '+<', $fifo_name or die "Cannot open $fifo_name: $!";
@@ -59,10 +58,20 @@ while (keys %running || @machines) {
        if (@machines && keys %running < $max) {
                my $mach = shift @machines;
                $ui->update($mach, undef, 'START');
-               my @scr = ('screen', '-t', $mach);
-               push @scr, '-S', $screen_session if defined $screen_session;
-               push @scr, '-X', 'screen', './brun', "--status-fifo=$fifo_name", $mach;
-               system @scr;
+               my @tm = ('tmux', 'new-window', '-n', $mach, '-d');
+               my $P5LIB = $ENV{"PERL5LIB"} // "";
+               my @cmd = (
+                       "BEX_HOME='$BEX::Config::home'",
+                       "BEX_LIB='$BEX::Config::lib'",
+                       "PERL5LIB='$P5LIB'",
+                       "$BEX::Config::lib/bin/bex-run",
+                       "--status-fifo=$fifo_name",
+                       "--queue=" . $queue->{'Name'},
+                       $mach,
+                       );
+               push @cmd, ">debug.log", "2>&1" if $debug_children;
+               push @tm, join(" ", @cmd);
+               system @tm;
                !$? or $ui->update($mach, undef, 'INTERR');
                $running{$mach} = 'START';
                next;