-
- my $pid = fork();
- if (defined $pid) {
- if (!$pid) {
- # in child, unset warnings, disable debugging and general clean up from us
- $^W = 0;
-# do "$main::root/perl/Disable_debug.pl";
- eval "{ package DB; sub DB {} }";
- alarm(0);
- $SIG{CHLD} = $SIG{TERM} = $SIG{INT} = $SIG{__WARN__} = 'DEFAULT';
- exec "$line";
- dbg('cron', "exec '$line' failed $!");
- }
- dbg('cron', "spawn of $line started");
- } else {
- dbg('cron', "can't fork for $line $!");
+
+ my $fc = Mojo::IOLoop::Subprocess->new();
+ $fc->run(
+ sub {my @res = `$line`; return @res},
+ sub {
+ my ($fc, $err, @res) = @_;
+ if ($err) {
+ my $s = "DXCron::spawn: error $err";
+ dbg($s);
+ return;
+ }
+ for (@res) {
+ chomp;
+ dbg("DXCron::spawn: $_") if isdbg("cron");
+ }
+ }
+ );
+}
+
+sub spawn_cmd
+{
+ my $line = shift;
+
+ dbg("spawn_cmd run: $line") if isdbg('cron');
+ my $fc = Mojo::IOLoop::Subprocess->new();
+ $fc->run(
+ sub {
+ $main::me->{_nospawn} = 1;
+ my @res = $main::me->run_cmd($line);
+ delete $main::me->{_nospawn};
+ return @res;
+ },
+ sub {
+ my ($fc, $err, @res) = @_;
+ if ($err) {
+ my $s = "spawn_cmd: error $err";
+ dbg($s);
+ }
+ for (@res) {
+ chomp;
+ dbg("spawn_cmd: $_") if isdbg("cron");
+ }
+ }
+ );
+}
+
+# do an rcmd to another cluster from the crontab
+sub rcmd
+{
+ my $call = uc shift;
+ my $line = shift;
+
+ # can we see it? Is it a node?
+ my $noderef = Route::Node::get($call);
+ return unless $noderef && $noderef->version;
+
+ # send it
+ DXProt::addrcmd($main::me, $call, $line);
+}
+
+sub run_cmd
+{
+ my $line = shift;
+ my @in = $main::me->run_cmd($line);
+ dbg("cmd run: $line") if isdbg('cron');
+ for (@in) {
+ s/\s*$//og;
+ dbg("cmd out: $_") if isdbg('cron');