3 # At most 2 parallel sshs per function
5 export SSHLOGIN1
=parallel@lo
6 export SSHLOGIN2
=csh@lo
10 echo '### bug #59146: Support --termseq for remote jobs'
12 # setup signal handlers for all signals
17 ABRT BUS FPE KILL USR1
18 SEGV USR2 PIPE ALRM TERM
19 STKFLT CHLD CONT STOP TSTP
20 TTIN TTOU URG XCPU XFSZ
21 VTALRM PROF WINCH IO PWR
22 SYS RTMIN RTMIN+1 RTMIN+2 RTMIN+3
23 RTMIN+4 RTMIN+5 RTMIN+6 RTMIN+7 RTMIN+8
24 RTMIN+9 RTMIN+10 RTMIN+11 RTMIN+12 RTMIN+13
25 RTMIN+14 RTMIN+15 RTMAX-14 RTMAX-13 RTMAX-12
26 RTMAX-11 RTMAX-10 RTMAX-9 RTMAX-8 RTMAX-7
27 RTMAX-6 RTMAX-5 RTMAX-4 RTMAX-3 RTMAX-2
30 eval q[$SIG{].$i.q[}=sub{open(A,">>$file");print A "].$i.q[\n";};];
32 for(1..100) { sleep(1);}
36 .
`which env_parallel.bash`
37 env_parallel
-v --timeout 2 --termseq HUP
,30,INT
,30,QUIT
,30,ILL
,30,TRAP
,30,ABRT
,30,BUS
,30,FPE
,30,USR1
,30,SEGV
,30,USR2
,30,PIPE
,30,ALRM
,30,TERM
,30,STKFLT
,30,CHLD
,30,CONT
,30,TSTP
,30,TTIN
,30,TTOU
,30,URG
,30,XCPU
,30,XFSZ
,30,VTALRM
,30,PROF
,30,WINCH
,30,IO
,30,PWR
,30,SYS
,30,RTMIN
,30,RTMAX
,30,KILL
,9 -S $SSHLOGIN1 doit
::: 1
40 ssh $SSHLOGIN1 rm $file
44 echo 'bug #59181: --ssh is not propagated to --nonall'
45 parallel
--ssh 'echo OK | ssh' -S $SSHLOGIN1 --nonall cat
49 echo '### Test --onall'
50 parallel
--onall --tag -k -S $SSHLOGIN1,$SSHLOGIN2 '(echo {1} {2}) | awk \{print\ \$2}' ::: a b c
::: 1 2
53 par_test_pipe_onall
() {
54 echo '### Test | --onall'
56 parallel
--onall --tag -k -S $SSHLOGIN1,$SSHLOGIN2 '(echo {1} {2}) | awk \{print\ \$2}' ::: a b c
:::: -
60 echo '### Test --onall -u'
61 parallel
--onall -S $SSHLOGIN1,$SSHLOGIN2 -u '(echo {1} {2}) | awk \{print\ \$2}' ::: a b c
::: 1 2 3 |
66 echo '### Test --nonall'
67 parallel
--nonall -k -S $SSHLOGIN1,$SSHLOGIN2 pwd |
68 perl
-pe 's:/mnt/4tb::g' |
73 echo '### Test --nonall -u - should be interleaved x y x y'
74 parallel
--nonall -S $SSHLOGIN1,$SSHLOGIN2 -u 'pwd|grep -q csh && sleep 3; pwd;sleep 12;pwd;' |
75 perl
-pe 's:/mnt/4tb::g'
78 par_read_sshloginfile_from_stdin
() {
79 echo '### Test read sshloginfile from STDIN'
80 echo $SSHLOGIN1,$SSHLOGIN2 |
81 parallel
-S - -k --nonall pwd |
82 perl
-pe 's:/mnt/4tb::g'
83 echo $SSHLOGIN1,$SSHLOGIN2 |
84 parallel
--sshloginfile - -k --onall pwd\
; echo ::: foo |
85 perl
-pe 's:/mnt/4tb::g'
88 par_nonall_basefile
() {
89 echo '### Test --nonall --basefile'
90 touch tmp
/nonall--basefile
91 stdout parallel
--nonall --basefile tmp
/nonall--basefile
-S $SSHLOGIN1,$SSHLOGIN2 ls tmp
/nonall--basefile
92 stdout parallel
--nonall -S $SSHLOGIN1,$SSHLOGIN2 rm tmp
/nonall--basefile
93 stdout
rm tmp
/nonall--basefile
96 par_onall_basefile
() {
97 echo '### Test --onall --basefile'
98 touch tmp
/onall--basefile
99 stdout parallel
--onall --basefile tmp
/onall--basefile
-S $SSHLOGIN1,$SSHLOGIN2 ls {} ::: tmp
/onall--basefile
100 stdout parallel
--onall -S $SSHLOGIN1,$SSHLOGIN2 rm {} ::: tmp
/onall--basefile
101 stdout
rm tmp
/onall--basefile
104 par_nonall_basefile_cleanup
() {
105 echo '### Test --nonall --basefile --cleanup (rm should fail)'
106 touch tmp
/nonall--basefile--clean
107 stdout parallel
--nonall --basefile tmp
/nonall--basefile--clean
--cleanup -S $SSHLOGIN1,$SSHLOGIN2 ls tmp
/nonall--basefile--clean
108 stdout parallel
--nonall -S $SSHLOGIN1,$SSHLOGIN2 rm tmp
/nonall--basefile--clean
109 stdout
rm tmp
/nonall--basefile--clean
112 par_onall_basefile_cleanup
() {
113 echo '### Test --onall --basefile --cleanup (rm should fail)'
114 touch tmp
/onall--basefile--clean
115 stdout parallel
--onall --basefile tmp
/onall--basefile--clean
--cleanup -S $SSHLOGIN1,$SSHLOGIN2 ls {} ::: tmp
/onall--basefile--clean
116 stdout parallel
--onall -S $SSHLOGIN1,$SSHLOGIN2 rm {} ::: tmp
/onall--basefile--clean
117 stdout
rm tmp
/onall--basefile--clean
121 echo '### Test --workdir .'
122 ssh $SSHLOGIN1 mkdir
-p mydir
125 parallel
--workdir .
-S $SSHLOGIN1 ::: pwd |
126 perl
-pe 's:/mnt/4tb::g'
130 echo '### Test --wd .'
131 ssh $SSHLOGIN2 mkdir
-p mydir
134 parallel
--workdir .
-S $SSHLOGIN2 ::: pwd |
135 perl
-pe 's:/mnt/4tb::g'
139 echo '### Test --wd {}'
140 ssh $SSHLOGIN2 rm -rf wd1 wd2
143 parallel
--workdir {} -S $SSHLOGIN2 touch ::: wd1 wd2
144 ssh $SSHLOGIN2 ls -d wd1 wd2
148 echo '### Test --wd {= =}'
149 ssh $SSHLOGIN2 rm -rf WD1 WD2
152 parallel
--workdir '{= $_=uc($_) =}' -S $SSHLOGIN2 touch ::: wd1 wd2
153 ssh $SSHLOGIN2 ls -d WD1 WD2
157 echo '### Test --nonall --wd'
158 parallel
--workdir /tmp
-S $SSHLOGIN2 --nonall pwd
161 par_remote_symlink_dir
() {
162 echo 'bug #51293: parallel does not preserve symlinked directory structure on remote'
163 ssh parallel@lo
'mkdir -p tmp; rm -rf wd; ln -s tmp wd'
166 parallel
--nonall --rsync-opts '--keep-dirlinks -rlDzR' -S parallel@lo
--basefile wd
/testfile
167 ssh parallel@lo
rm wd
&& echo OK
: wd is still a symlink with
--rsync-opts
169 ssh parallel@lo
'mkdir -p tmp; rm -rf wd; ln -s tmp wd'
172 export PARALLEL_RSYNC_OPTS
='--keep-dirlinks -rlDzR'
173 parallel
--nonall -S parallel@lo
--basefile wd
/testfile
174 ssh parallel@lo
rm wd
&& echo OK
: wd is still a symlink with PARALLEL_RSYNC_OPTS
177 par_sshlogin_replacement
() {
178 echo '### show {sshlogin} and {host}'
179 parallel
-S $SSHLOGIN1 --plus echo {sshlogin
} {} {host} ::: and
180 parallel
-S '5//usr/bin/ssh '$SSHLOGIN1 --plus echo {sshlogin
} {} {host} ::: and
183 par_timeout_onall
() {
184 echo '### --timeout --onall on remote machines: 2*slept 1, 2 jobs failed'
185 parallel
-j0 --timeout 6 --onall -S localhost
,$SSHLOGIN1 'sleep {}; echo slept {}' ::: 1 8 9
190 echo "bug #59006: rsync version 3.2.3 is not detected correctly"
191 PATH
=$HOME/bin
/rsync
:$PATH
192 rsync
--version |
grep version
194 parallel
--return {} -Sparallel@lo
touch ::: bug59006
199 export -f $
(compgen
-A function |
grep par_
)
200 #compgen -A function | grep par_ | sort | parallel --delay $D -j$P --tag -k '{} 2>&1'
201 compgen
-A function |
grep par_ |
sort |
202 parallel
--joblog /tmp
/jl-
`basename $0` -j5 --tag -k '{} 2>&1'