From 1c64d66d2b4be66b365b1e2ff116c83cbc7f54f8 Mon Sep 17 00:00:00 2001 From: Sam Brightman Date: Fri, 13 Jan 2017 14:53:56 +0100 Subject: [PATCH] Avoid breaking command line length limit when there is a large hold_jid dependency list --- inc/qsub | 11 +++++++++-- lib/HMF/Pipeline/Job.pm | 8 +++++++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/inc/qsub b/inc/qsub index fedf4b6..f6bb387 100755 --- a/inc/qsub +++ b/inc/qsub @@ -1,13 +1,20 @@ #!/usr/bin/env bash -function main() { +function parse_options() { local i for ((i = 1; i <= $#; i++)); do if [[ "${@:$i:1}" == "-N" ]]; then - local name="${*:$i+1:1}" + echo "${*:$i+1:1}" + return + fi + if [[ "${@:$i:1}" == "-@" ]]; then + parse_options $(cat "${*:$i+1:1}") fi done +} +function main() { + local name=$(parse_options "$@") echo "Your job $$ (\"${name}\") has been submitted" local me=$(basename "$0") diff --git a/lib/HMF/Pipeline/Job.pm b/lib/HMF/Pipeline/Job.pm index c940c62..60492c9 100644 --- a/lib/HMF/Pipeline/Job.pm +++ b/lib/HMF/Pipeline/Job.pm @@ -59,7 +59,13 @@ sub submit { my $stdout = catfile($dirs->{log}, "${job_name}.out"); my $stderr = catfile($dirs->{log}, "${job_name}.err"); my $hold_jid = hold_jid($hold_jids); - system "$qsub -o $stdout -e $stderr -N $job_id $hold_jid $bash_file"; + + my $option_file = File::Temp->new(); + open my $fh, ">", $option_file; + say $fh "-o $stdout -e $stderr -N $job_id $hold_jid"; + close $fh; + system "$qsub -@ $option_file $bash_file"; + return; }