Ни на кого не похож, знает способ сделать это, затем.
Вместо этого я просто сделал то, что в основном делает Tomcat; запишите сценарий оболочки и вызовите это от моего сервиса вместо вызова java
непосредственно.
Этот сценарий оболочки также заботится о создании использования файла PID echo $!
после запуска JVM. Для завершения работы я записал подобный сценарий, который проверяет этот файл PID и удаляет его после успешного завершения работы. Оба сценария вызываются с помощью sudo -Eu $USER script_name.sh
от сервиса.
Технически, это не отвечает на мой вопрос, потому что решение не использует startproc
вообще, но это работает и избегает громоздкой задачи сравнения командных строк выполнения процессов.
-f
в вашем тесте проверяет, существует ли FILE
и является ли он обычным файлом .
Вам понадобится -d
, чтобы проверить, существует ли ФАЙЛ
и является ли он каталогом .
if [ ! -d "$DIR/0folder" ]
then
mkdir "$DIR/0folder"
fi
Однако не обязательно проверять, существует ли каталог. Согласно странице руководства mkdir
, мы видим следующее
man mkdir | grep -A1 -- -p
-p, --parents
no error if existing, make parent directories as needed
Однако, если FILE
существует и является обычным файлом mkdir -p
завершится ошибкой с
mkdir: /Allfoldersgoeshere/subfolder/0folder': Not a directory.
В этом сценарии обработка файла
, который, как ожидается, будет каталогом
, будет необходима перед созданием каталога.
Прочитайте руководство. Параметр -P сделает каталог и промежуточные каталоги по мере необходимости, если оно не существует или молча. Предполагая, что вы не обрабатываете тысячи файлов, то вы могли бы просто сделать MKDIR -P "$ {dir} / 0folfolder
Или, если вы чувствуете необходимость тестирования
[ -d "${DIR}/0folder" ] || mkdir -p "${DIR}/0folder"
Руководство
MAN BASH
в соответствии с условными выражениями:
-f file
True if file exists and is a regular file.
-d file
True if file exists and is a directory.
Итак, чтобы проверить наличие каталога (не файла) ...
if [[ ! -d "$DIR/0folder" ]] ; then
mkdir "$DIR/0folder"
fi
Ни -d
, ни -f
не полезны здесь для проведения робастных тестов - ведь они прямо противоположны сторонам одной и той же монеты.
touch file; [ ! -d file ] && mkdir file
mkdir: cannot create directory ‘file’: File exists
Видишь? Лучше было бы [ -e ... ] || mkdir ...
для проверки существования, что, по крайней мере, сэкономило бы на приведенной выше ошибке, но даже в этом есть свои проблемы - например, расовые условия или не создание родителей по мере необходимости, или неразрешенные симлинки.
if [ ! -e "$DIR/0folder" ] &&
[ ! -L "$DIR/0folder" ]
then mkdir -- "$DIR/0folder"
fi
... ближе, но все же радостно и все же предполагает, что все родители тоже существуют.
Вероятно, вы могли бы придумать уверенный тест
, если бы вам это было нужно, но на самом деле это не так. Вы можете получить создание атомарного каталога w/ mkdir -p
и протестировать его возврат. Не так уж и много стандартных инструментов оболочки, которые предлагают атомные fs ops - лучше воспользоваться теми, которые делают.
Вы делаете: если папки $DIR/0folder не существует, сделайте каталог с таким именем.
Просто измените -f (файл) на -d (каталог).
Это должно решить вашу проблему, теперь вас могут заинтересовать некоторые советы, которые люди давали здесь, но это не так.