RunCommand: use IPC::Run to spawn the command

This allows `logPath`s with spaces and other characters that might
otherwise cause problems inside a `system()` call.
This commit is contained in:
Cole Helbling 2022-01-25 10:33:01 -08:00
parent bb16f4fb10
commit bf3c46ed43

View file

@ -9,6 +9,7 @@ use Digest::SHA1 qw(sha1_hex);
use Hydra::Model::DB; use Hydra::Model::DB;
use Hydra::Helper::Nix; use Hydra::Helper::Nix;
use File::Basename qw(dirname); use File::Basename qw(dirname);
use IPC::Run;
sub isEnabled { sub isEnabled {
my ($self) = @_; my ($self) = @_;
@ -174,14 +175,15 @@ sub buildFinished {
mkdir($dir); mkdir($dir);
open(my $f, '>', $logPath); open(my $f, '>', $logPath);
close($f);
umask($oldUmask); umask($oldUmask);
# Run the command my $stdin = "";
system("$command 1>$logpath 2>&1") == 0 my @cmd = ["sh", "-c", $command];
IPC::Run::run(@cmd, \$stdin, $f, '2>&1') == 1
or warn "notification command '$command' failed with exit status $? ($!)\n"; or warn "notification command '$command' failed with exit status $? ($!)\n";
close($f);
$runlog->completed_with_child_error($?, $!); $runlog->completed_with_child_error($?, $!);
} }
} }