try
for file in *"$foobar"*
do
dest="$(echo $file| sed -e 's/\(.*\)\.[^\.]*$/\1.csv/' )"
if test -f "$file"
then
/home/user/scriptModelise.pl "$file" >> /home/user/Documents/collectCSV/$dest
else
echo "no $foobar file"
fi
done
where
\(.*\)\.[^\.]*$
захват шаблона с любым символом, (конец шаблона) за которым следует точка, не точка до конца строки\1.csv
вставить шаблон найден, добавить .csv
*"$foobar "*
расширится до литеры *foobar*
(с соответствующим значением), если не будет найден подходящий файл. Отсюда необходимость test -f "$file"
Edit:
\(.*\)\.[^\.]*$
(левая сторона: поиск шаблона(ов))split into ( _ are place holder )
__. *__________
шаблон с любым символом (точка имеет специальное значение: любой символ)
__.*__\._______
шаблон с любым символом, за которым следует точка (экранированная точка - обычная точка)
__.*__\.[^\. ]*$
шаблон с любым символом, (конец шаблона), за которым следует точка, не точка ([^\.]*
) до конца строки (знак доллара специально предназначен для конца строки)
\(__\)__________
захват первой части шаблона.
\1.csv
(правая сторона, что делать)
\1____
\1
сопоставьте то, что было в первом \( \)
, \2
для второго и так далее, используйте &
для всего шаблона.
Решение найдено.
Я запустил hadoop и hbase, некоторые из их компонентов запускались по ssh-подключению к localhost, и процессы, которые запускались таким образом, не могли управляться systemd. Это был дизайн для распределенной системы, но в моем случае работа идет на одной машине. Поэтому я заменил в hadoop/bin/slaves.sh
for slave in `cat "$HOSTLIST"|sed "s/#.*$//;/^$/d"`; do
ssh $HADOOP_SSH_OPTS $slave $"${@// /\\ }" \
2>&1 | sed "s/^/$slave: /" &
if [ "$HADOOP_SLAVE_SLEEP" != "" ]; then
sleep $HADOOP_SLAVE_SLEEP
fi
done
на
for slave in `cat "$HOSTLIST"|sed "s/#.*$//;/^$/d"`; do
eval "$@"
if [ "$HADOOP_SLAVE_SLEEP" != "" ]; then
sleep $HADOOP_SLAVE_SLEEP
fi
done
Проблема была решена, и теперь процессы отображаются в дереве служебных процессов.
Hbase, вероятно, имеет такое же решение, но теперь он запускается с distributed=false и не запускает никаких процессов по ssh.
У меня была такая же/похожая проблема. Я предполагаю, что вы выполняете su или sudo в сценарии «myService»? Это приводит к тому, что ваш сервисный процесс (es )запускается в user.slice, а не в system.slice.
По-видимому, в user.slice не должно быть запущено ничего «важного», а systemd просто убивает все (? )обрабатывает там при выключении/перезагрузке.
Я решил эту проблему, удалив все пользовательские переключатели (su/sudo )в моих стартовых сценариях и используя директиву User в юнит-файле (User=xxx ).
Проверьте, где (в каком слайсе )запущены ваши процессы с помощью systemd -cgls