У меня есть требование запустить сценарий, который может запускаться только с определенным пользователем и группой. Формат команды похож на
$PROGRAM_HOME/bin/installService.sh [USER [GROUP]]
Я пробовал запустить сценарий как
$PROGRAM_HOME/bin/installService.sh root root
Но я получаю следующую ошибку
** ERROR: Only root user can install artifactory as a service
Когда я запускаю его с помощью sudo, я получаю еще одну ошибку
** ERROR: Could not change values in /etc/init.d/artifactory
Вот точная ошибка
** INFO: Please edit the files in /etc/opt/jfrog/artifactory to set the correct environment
Especially /etc/opt/jfrog/artifactory/default that defines ARTIFACTORY_HOME, JAVA_HOME and JAVA_OPTIONS
cp: /etc/init.d/artifactory: No such file or directory
chmod: /etc/init.d/artifactory: No such file or directory
sed: illegal option -- -
usage: sed script [-Ealn] [-i extension] [file ...]
sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]
** ERROR: Could not change values in /etc/init.d/artifactory
Whats the correct syntax to run it as a root?
Некоторые шаги, которые я выполнил для отладки
Я использую версию 4.11.1, которая меня особенно интересует
Я следую инструкциям из документа https://www.jfrog.com/confluence/display/RTF/Installing+on+Linux+Solaris+or+Mac+OS
Я использую Mac OSX EI Capitan 10.11.5
После ошибки я исправил местоположение ARTIFACTORY_HOME в / opt / jfrog / artifactory / default
Я запустил сценарий установки с sudo -s как root, но получил ту же самую ошибку.
Я также попробовал другую версию, чтобы узнать, есть ли проблема со скриптом в этой версии, но получил ту же ошибку
Я предполагаю, что эта часть скрипта не работает
installService() {
serviceName=$(basename $artServiceFile)
serviceFiles=$artBinDir/../misc/service
if [ -e "$artServiceFile" ]; then
cp -f $artServiceFile $serviceFiles/$serviceName.init.backup
fi
cp -f $serviceFiles/artifactory $artServiceFile
chmod a+x $artServiceFile
И результат запуска скрипта в режиме отладки
root# bash -x ./installService.sh
+ checkRoot
+ curUser=
+ '[' -x /usr/xpg4/bin/id ']'
++ id -nu
+ curUser=root
+ '[' root '!=' root ']'
+ '[' ./installService.sh = . ']'
+ '[' ./installService.sh = source ']'
+++ dirname ./installService.sh
++ cd .
++ pwd
+ artBinDir=/opt/artifactory-pro-4.11.1/bin
+++ dirname /opt/artifactory-pro-4.11.1/bin
++ cd /opt/artifactory-pro-4.11.1
++ pwd
+ artExtractDir=/opt/artifactory-pro-4.11.1
+ ARTIFACTORY_HOME=/opt/artifactory-pro-4.11.1
+ '[' -n '' ']'
+ artEtcDir=/etc/opt/jfrog/artifactory
+ TOMCAT_HOME=/opt/artifactory-pro-4.11.1/tomcat
+ artLogDir=/opt/artifactory-pro-4.11.1/logs
+ artRunDir=/opt/artifactory-pro-4.11.1/run
+ '[' -n '' ']'
+ artServiceFile=/etc/init.d/artifactory
+ artDefaultFile=/etc/opt/jfrog/artifactory/default
+ getArtUser ''
+ '[' -n '' ']'
+ '[' -z '' ']'
+ ARTIFACTORY_USER=artifactory
+ getArtGroup ''
+ '[' -n '' ']'
+ echo
+ echo 'Installing artifactory as a Unix service that will run as user artifactory'
Installing artifactory as a Unix service that will run as user artifactory
+ echo 'Installing artifactory with home /opt/artifactory-pro-4.11.1'
Installing artifactory with home /opt/artifactory-pro-4.11.1
+ createArtUser
+ echo -n 'Creating user artifactory...'
Creating user artifactory...++ getent passwd artifactory
++ awk -F: '{print $1}'
./installService.sh: line 40: getent: command not found
+ artifactoryUsername=
+ '[' '' = artifactory ']'
+ echo -n creating...
creating...++ which bash
+ useradd -m -s /usr/local/bin/bash artifactory
./installService.sh: line 45: useradd: command not found
+ '[' '!' 127 ']'
+ echo ' DONE'
DONE
+ createArtGroup
+ '[' '' == '' ']'
+ return 0
+ createArtEtc
+ echo
+ echo -n 'Checking configuration link and files in /etc/opt/jfrog/artifactory...'
Checking configuration link and files in /etc/opt/jfrog/artifactory...+ '[' -L /opt/artifactory-pro-4.11.1/etc ']'
+ echo -n 'already exists, no change...'
already exists, no change...+ echo -e ' DONE'
DONE
+ createArtDefault
+ echo -n 'Creating environment file /etc/opt/jfrog/artifactory/default...'
Creating environment file /etc/opt/jfrog/artifactory/default...+ '[' -e /etc/opt/jfrog/artifactory/default ']'
+ echo -n 'already exists, no change...'
already exists, no change...+ echo -e ' DONE'
DONE
+ echo -e '\033[33m** INFO: Please edit the files in /etc/opt/jfrog/artifactory to set the correct environment\033[0m'
** INFO: Please edit the files in /etc/opt/jfrog/artifactory to set the correct environment
+ echo -e '\033[33mEspecially /etc/opt/jfrog/artifactory/default that defines ARTIFACTORY_HOME, JAVA_HOME and JAVA_OPTIONS\033[0m'
Especially /etc/opt/jfrog/artifactory/default that defines ARTIFACTORY_HOME, JAVA_HOME and JAVA_OPTIONS
+ createArtRun
+ '[' '!' -d /opt/artifactory-pro-4.11.1/run ']'
+ installService
++ basename /etc/init.d/artifactory
+ serviceName=artifactory
+ serviceFiles=/opt/artifactory-pro-4.11.1/bin/../misc/service
+ '[' -e /etc/init.d/artifactory ']'
+ cp -f /opt/artifactory-pro-4.11.1/bin/../misc/service/artifactory /etc/init.d/artifactory
cp: /etc/init.d/artifactory: No such file or directory
+ chmod a+x /etc/init.d/artifactory
chmod: /etc/init.d/artifactory: No such file or directory
+ sed --in-place -e '
/processname:/ s%artifactory%artifactory%g;
/Provides:/ s%artifactory%artifactory%g;
s%# pidfile: .*%# pidfile: /opt/artifactory-pro-4.11.1/run/artifactory.pid%g;
s%/etc/opt/jfrog/artifactory/default%/etc/opt/jfrog/artifactory/default%g;
' /etc/init.d/artifactory
sed: illegal option -- -
usage: sed script [-Ealn] [-i extension] [file ...]
sed [-Ealn] [-i extension] [-e script] ... [-f script_file] ... [file ...]
+ errorArtHome 'Could not change values in /etc/init.d/artifactory'
+ echo
+ echo -e '\033[31m** ERROR: Could not change values in /etc/init.d/artifactory\033[0m'
** ERROR: Could not change values in /etc/init.d/artifactory
+ echo
+ exit 1
К сожалению, иногда такое случается. Возможно, сценарий старый или написан для другой ОС, или у вас отсутствуют требуемые пакеты, или он просто отстой. Есть способы справиться с этим.
Вы спрашиваете об этом с точки зрения сценария оболочки, поэтому я отвечу именно так. Кроме того, я не знаю, какая у вас ОС (или версия), и где у вас это программное обеспечение (и его версия), как вы дошли до этого момента и что именно вы пытаетесь сделать.
Вы следовали инструкциям об определении настроек в /etc/opt/jfrog/artifactory
вроде предупреждает?
Вы используете последнюю версию этого софта / скрипта?
Ваш сценарий хочет изменить / получить доступ (или создать?) Сценарий инициализации когда это не удается:
/etc/init.d/artifactory
Отладка / исправление вещей
Не зная всех шагов, предпринимаемых скриптом, трудно сказать, почему вы получаете эти сообщения.
Во-первых, получите корневую оболочку, черт возьми. sudo -s
, sudo su -
или su -
должен доставить вас туда.
Тогда - делает /etc/init.d
существует? Делает /etc/init.d/artifactory
существует?
Вы можете открыть сценарий и прочитать его в поисках проблемы. Или вы можете запустить его с пошаговым выводом отладки как:
bash -x <script> <args>
На самом деле, просто запустив скрипт с bash
иногда может помочь, поскольку некоторые сценарии оболочки содержат #!/bin/sh
вверху, который может вызывать dash
вместо этого, по крайней мере, в системах Ubuntu. Dash может привести к сбою некоторых сценариев bash.
bash <script> <args>
Когда вы обнаружите проблему (со сценарием или вашей системой), исправьте ее и перезапустите сценарий. Вернитесь и обновите свой вопрос полезной информацией, если что-то не получится.