GNU parallel и basefile вне pwd?

sysdig может отслеживать их с помощью ] evt.type = kill filter:

# terminal uno
perl -E 'warn "$$\n"; $SIG{INT}= sub { die "aaaaargh" }; sleep 999'

# terminal dos
sysdig -p '%proc.pname[%proc.ppid]: %proc.name -> %evt.type(%evt.args)' evt.type=kill

# terminal tres
kill -INT 11943  # or whatever

Может потребоваться более конкретный фильтр, чтобы избежать, например systemd спам из-за засорения вывода sysdig или grep для имен процессов или идентификаторов:

# sysdig -p '%proc.pname[%proc.ppid]: %proc.name -> %evt.type(%evt.args)' evt.type=kill
systemd[1]: systemd-udevd -> kill(pid=11969(systemd-udevd) sig=15(SIGTERM) )
systemd[1]: systemd-udevd -> kill(res=0 )
systemd[1]: systemd-udevd -> kill(pid=11970(systemd-udevd) sig=15(SIGTERM) )
systemd[1]: systemd-udevd -> kill(res=0 )
systemd[1]: systemd-udevd -> kill(pid=11971(systemd-udevd) sig=15(SIGTERM) )
systemd[1]: systemd-udevd -> kill(res=0 )
sshd[11945]: bash -> kill(pid=11943(perl) sig=2(SIGINT) )
sshd[11945]: bash -> kill(res=0 )

2
28.11.2016, 03:23
1 ответ

Передача файлов ( т.е. - basefile, --transfer-file, --transfer, --return ) в GNU Parallel использует магию /./ rsync . Поэтому, когда вы попросите передать /tmp/common.sh , он будет помещен в /tmp/common.sh на удаленной стороне. Но если вы попросите передать / tmp /./ common.sh , он перенесет /tmp/common.sh в $ (pwd) /. .

Другими словами:

(local file) => (remote file)
dir/file => ./dir/file
/tmp/sub/dir/file => /tmp/sub/dir/file
/tmp/sub/./dir/file => ./dir/file

Вы видите ошибку, вероятно, из-за того, что / tmp является символической ссылкой в ​​удаленной системе.

Если вы используете - workdir ... , у вас будет новый рабочий каталог для каждого задания. Поскольку - basefile копирует файл только перед запуском первого задания, это не сработает.

Вместо этого вы можете передать common.sh для каждого задания:

parallel --wd ... --tf {1} -S server 'pwd ; ls; echo {2}' ::: /tmp/./common.sh ::: foo bar
2
27.01.2020, 22:19

Теги

Похожие вопросы