Если я правильно понимаю, parallel --spreadstdin
отправляет блоки ввода, переданные на стандартный ввод процессов, которые он запускает, поэтому вы хотите, чтобы my_command
читал не стандартный ввод Parallel, а свой собственный.
Если my_command
по умолчанию не читает стандартный ввод, вы обычно можете использовать /dev/stdin
вместо имени файла, он разрешается в тот же файл/канал, что и «исходный» стандартный ввод.
Так
my | pipeline | parallel --spreadstdin my_command --file /dev/stdin
должно быть тем, что вы хотите.
Я вижу здесь ту же проблему, когда скрипт для запуска Oracle не работает. Если вы посмотрите в /var/messages, вы увидите ошибку selinux, говорящую, что это не разрешено. Я работаю над CentOS и изменил конфигурацию selinux с принудительной на разрешительную. После этого он работал нормально. Для меня это просто виртуальная машина для разработки, поэтому безопасность не была проблемой. В файле сообщений также был способ исключить только одну службу init.d, это тоже стоит попробовать.
кошка /etc/selinux/config
# This file controls the state of SELinux on the system on boot.
# SELINUX can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=permissive
Хотел сообщить об этом, хотя проблема уже помечена как решенная, поскольку у некоторых людей нет возможности отключить SELinux.
В каталоге init.d
используйте ls -Z
, чтобы просмотреть контексты SELinux для всех файлов. Ваш сценарий, вероятно, имеет неправильный контекст по сравнению с другими сценариями запуска, поэтому вы хотите изменить его, чтобы он соответствовал. Проще всего запустить
sudo chcon --reference=nameofascriptthatworks yourscriptname
и проверьте правильность установки контекста с помощью другого ls -Z
.