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: $!";
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;