У меня есть следующая строка в do_start () моего пользовательского сценария инициализации, который запускает Java-приложение:
start-stop-daemon --background --start --quiet --oknodo --make-pidfile --pidfile $PIDFILE --chdir $SOLR_DIR --chuid $USER --exec $DAEMON -- \
$DAEMON_ARGS >>$LOG_DIR/$NAME.log 2>>$LOG_DIR/$NAME.err
при расширении становится:
start-stop-daemon --background --start --quiet --oknodo --make-pidfile --pidfile /var/run/solr.pid
--chdir /home/phuihock/src/proj/solr
--chuid phuihock
--exec /usr/bin/java
-- -jar start.jar >>/home/phuihock/src/proj/logs/solr.log 2>>/home/phuihock/src/proj/logs/solr.err
Файлы журнала созданы принадлежат пользователю root, группе root. Я ожидаю, что они принадлежат пользователю, которого я установил с помощью --chuid, потому что с man-страницы все после - передается без изменений.
У меня вопрос: все ли перенаправления с start-stop-daemon принадлежат пользователю root, и есть ли способ изменить это?
Перенаправления не являются частью аргументов командной строки. Они обрабатываются отдельно оболочкой, которая в вашем случае запускается от имени пользователя root. Но даже если разрешения были правильными, эта команда не привела бы к добавлению вывода демона в файл журнала.
Для иллюстрации, это то, что на самом деле происходит:
/usr/bin/java -jar start.jar
. Обратите внимание, что там нет перенаправления вывода, но процесс разветвляется в фоновом режиме, поэтому вывод заканчивается в /dev/null.Другими словами, демон должен либо принять аргумент файла журнала, либо вам нужно создать скрипт-обертку, который будет обрабатывать перенаправление. Это может выглядеть следующим образом
#/bin/sh
cd /home/phuihock/src/proj/solr
exec /usr/bin/java -jar start.jar >> logs/solr.log