Назад | Перейти на главную страницу

Передать пользователя и группу в сценарий оболочки в командной строке

У меня есть требование запустить сценарий, который может запускаться только с определенным пользователем и группой. Формат команды похож на

$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>

Когда вы обнаружите проблему (со сценарием или вашей системой), исправьте ее и перезапустите сценарий. Вернитесь и обновите свой вопрос полезной информацией, если что-то не получится.