jCjSGui предназначен для запуска постов как использующих так и не использующих функционал GUI,
а также для отладки js-скриптов
cd /home/jcjs/bin export LD_LIBRARY_PATH=/home/jcjs/lib ./jCjSGui
По умолчанию, используется главный конфигурационный файл /home/jcjs/etc/jcjs.xml
Если вас не устраивает такое положение дел, можно запустить сервер jCjS указав ему необходимую конфигурацию
cd /home/jcjs/bin export LD_LIBRARY_PATH=/home/jcjs/lib # Чтобы запустить несколько одновременно работающих процессов, достаточно выполнить ./jCjSGui -cfg ../stuff/tests/pluginPHP/jcjs_php.xml ./jCjSGui -cfg ../stuff/tests/SMTPClient/jcjs_SMTPClient.xml # Главное условие одновременного запуска - разные http-порты, используемые jCjS
После запуска jCjSGui в трее появится значок
правый клик мыши по которому вызовет контекстное меню

Если выбрать пункт меню jCjS v.2.4.8.345, будет открыт браузер
по адресу
расположения главного поста. Например http://localhost:8080/postsTable/
Консольный вариант запуска полезен для отладки скриптов,
при этом все сообщения сервера jCjS выводятся в консоль.
Запуск сервера в консольном варианте производится командой
/home/jcjs/bin/jCjSService -e
По умолчанию, используется главный конфигурационный файл /home/jcjs/etc/jcjs.xml
Если вас не устраивает такое положение дел, можно запустить сервер jCjS указав ему необходимую конфигурацию
export LD_LIBRARY_PATH=/home/jcjs/lib /home/jcjs/bin/jCjSService -e -cfg ../stuff/postsTable/jcjs_postTable.xmlДля остановки сервера нажимаем Ctrl-C.
Второй вариант запуска в виде сервиса - с отключенным выводом в консоль.
События сервера будут логироваться в файлы, расположенные в папке /home/jcjs/logs.
Прежде чем запустить службу, необходимо ее инициализировать. Выполнять команды следует с правами администратора.
cd /home/jcjs/bin # Установка службы с дефолтным именем jCjSService и # дефолтным конфигурацонным файлом ../etc/jcjs.xml ./jCjSService -i # Будет установлена службы с именем jCjSService # Чтобы установить несколько служб, достаточно указать # отличное от jCjSService имя и используемый конфиг службы ./jCjSService -i -n jCjSServicePHP -a "-cfg ../stuff/tests/pluginPHP/jcjs_php.xml" ./jCjSService -i -n jCjSServiceSMTP -a "-cfg ../stuff/tests/SMTPClient/jcjs_SMTPClient.xml" # Будут установлены службы с именами jCjSServicePHP и jCjSServiceSMTP # Главное условие одновременного запуска - разные http-порты, используемые jCjS # так-же существует возможность установки служб с принудительеным указанием http порта ./jCjSService -i -n jCjSServicePHP -a "-p 8081 -cfg ../stuff/tests/pluginPHP/jcjs_php.xml" ./jCjSService -i -n jCjSServiceSMTP -a "-p 8082 -cfg ../stuff/tests/SMTPClient/jcjs_SMTPClient.xml"
После установки службы, будет сгенерирован файл /etc/jCjSService.conf
cd /home/jcjs/bin cat /etc/jCjSService.conf # [services] # jCjSService\path=/home/jctrl/bin/jCjSService # jCjSService\description=jCjS service # jCjSService\automaticStartup=0 # jCjSService\args= # jCjSServicePHP\path=/home/jctrl/bin/jCjSService # jCjSServicePHP\description=jCjS service # jCjSServicePHP\automaticStartup=0 # jCjSServicePHP\args=-cfg ../stuff/tests/pluginPHP/jcjs_php.xml # jCjSServiceSMTP\path=/home/jctrl/bin/jCjSService # jCjSServiceSMTP\description=jCjS service # jCjSServiceSMTP\automaticStartup=0 # jCjSServiceSMTP\args=-cfg ../stuff/tests/SMTPClient/jcjs_SMTPClient.xml
После того, как службы установлены, их можно запустить с правами пользователя jcjs
Методику добавления пользователя jcjs можно посмотреть в разделе Добавление пользователя
export LD_LIBRARY_PATH=/home/jcjs/lib sudo -u jcjs /home/jcjs/bin/jCjSService # будет запущена служба с дефолтным именем jCjSService # равноценно такой записи sudo -u jcjs /home/jcjs/bin/jCjSService -n jCjSService # будет запущена служба с именем jCjSService sudo -u jcjs /home/jcjs/bin/jCjSService -n jCjSServicePHP # будет запущена служба с именем jCjSServicePHP sudo -u jcjs /home/jcjs/bin/jCjSService -n jCjSServiceSMTP # будет запущена служба с именем jCjSServiceSMTP # в некоторых ОС команда запуска с правами пользователя jcjs выглядит иначе echo /home/jcjs/bin/jCjSService -n jCjSServicePHP | su jcjsДля остановки сервера вызываем jCjSService с ключем -t
export LD_LIBRARY_PATH=/home/jcjs/lib sudo -u jcjs /home/jcjs/bin/jCjSService -t # будет остановлена служба с дефолтным именем jCjSService sudo -u jcjs /home/jcjs/bin/jCjSService -t -n jCjSServicePHP # будет остановлена служба с именем jCjSServicePHP sudo -u jcjs /home/jcjs/bin/jCjSService -t -n jCjSServiceSMTP # будет остановлена служба с именем jCjSServiceSMTP # в некоторых ОС команда останова с правами пользователя jcjs выглядит иначе echo /home/jcjs/bin/jCjSService -t -n jCjSServicePHP | su jcjs # и еще один способ корректного останова служб (будут остановлены все службы) # вниманиие! символы `` (клавиша Ё на клавиатуре) # отличаются от символов '' (клавиша Э на клавиатуре) kill `pidof jCjSService`
Для автозагрузки сервера в виде демона - самый простой но не лучший вариант добавить в /etc/rc.local команду запуска:
export LD_LIBRARY_PATH=/home/jcjs/lib sudo -u jcjs /home/jcjs/bin/jCjSService
Гораздо эффективней воспользоваться сценарием генерации скриптов запуска
Категорически не рекомендуется запускать jCjS с правами пользователя root
Создайте специального пользователя с урезанными правами и без доступа к шеллу /bin/bash
# Создать группу (ключ -f подавляет ошибку, если такая группа существует) groupadd -f jcjs # создать пользователя -m jcjs и добавить его в группу -g jcjs с домашним каталогом -d /home/jcjs useradd -r -m jcjs -g jcjs -d /home/jcjs -s /bin/trueХорошим вариантом будет выполнение сценария /home/jcjs/bin/set.chown.sh, который добавит пользователя и выдаст права на домашний каталог jCjS
Запустить скрипт с правами администратора, указав имя пользователя
/home/jcjs/bin/set.chown.sh jcjs
Для удаления пользователя, выполните команды указанные в листинге с правами администратора
USR_=jcjs
GRP_=jcjs
nul=/dev/null
# сначала узнать нличие удаляемого пользователя
grep -E -i -w "^${USR_}" /etc/passwd >${nul} && (
echo -n "Delete user \"${USR_}\" ... "
userdel ${USR_} >${nul} 2>${nul} && echo [OK] || echo [Err]
# обычно предыдущая команда удаляет сразу и группу пользователя, т.к.
# в группе больше нет пользователей, но лучшим вариантом будет
# выполнение команды удаления группы с подавлением вывода ошибок в терминал
groupdel ${GRP_} >${nul} 2>${nul}
)
Для правильного функционирования jCjS, необходимо выдать права на каталог /home/jcjs
Создайте в каталоге /home/jcjs/bin скрипт
#!/bin/bash
# Set right home directory to control user
# test run directory
R=`dirname $0`
if test "$R" != "." ; then
cd $R
fi
if test -z ${1} ; then
printf '\nUsage:\tRun script \t ./%s userName\n\n' "`basename $0`"
USR_=${USERNAME};
else
USR_=${1};
fi
GRP_=${USR_};
nul=/dev/null
DIR_=`dirname $PWD`
_prn_(){
printf "%-60s\t...\t" "$1"
}
if test "$USER" != "${USR_}" ; then
grep -E -i -w "^${USR_}" /etc/passwd >${nul} && (
_prn_ "Delete user \"${USR_}\""
userdel ${USR_} >${nul} 2>${nul} && echo [OK] || echo [Err]
groupdel ${GRP_} >${nul} 2>${nul}
)
_prn_ "Add group \"${USR_}\""
groupadd -f ${GRP_} >${nul} 2>${nul} && echo [OK] || echo [Err]
_prn_ "Add user \"${USR_}\""
useradd -r -m ${USR_} -g ${GRP_} -d ${DIR_} -c "system user for ${USR_}" -s /bin/true >$nul 2>$nul && echo [OK] || echo [Err]
fi
_prn_ "Set chmod 700 to directory \"`basename ${DIR_}`\""
find ${DIR_} -type d -exec chmod 700 {} \; >${nul} && echo [OK] || echo [Err]
_prn_ "Set access to directory \"`basename ${DIR_}`\" for the user \"${USR_}\""
chown -R ${USR_}:${GRP_} ${DIR_} >${nul} && echo [OK] || echo [Err]
usermod -d ${DIR_} ${USR_} >${nul} 2>${nul}
# открыть доступ к последовательным портам
usermod -G dialout ${USR_} >${nul} 2>${nul}
Запустить скрипт с правами администратора, указав имя пользователя
/home/jcjs/bin/set.chown.sh jcjs
# для доступа к портам выполните sudo usermod -G dialout jcjs # проверка, что права на запись в порт есть echo "dadadadasdadasdadsads" > /dev/ttyUSB0
Для правильного пуска jCjSService, необходимо сгенерировать скрипты запуска, передав в аргументах имя домашнего каталога и имя пользователя.
/home/jcjs/etc/init.d/make_scripts.sh /home/jcjs jcjs # Make script /home/jcjs/etc/init.d/jCjS.debian ... [OK] # Make script /home/jcjs/etc/init.d/jCjS.generic ... [OK] # Make script /home/jcjs/etc/init.d/jCjS.gentoo ... [OK] # Make script /home/jcjs/etc/init.d/jCjS.mandrake ... [OK] # Make script /home/jcjs/etc/init.d/jCjS.slackware ... [OK] # Make script /home/jcjs/etc/init.d/jCjS.suse ... [OK]
После работы сценария make_scripts.sh, скопировать необходимый скрипт в системный каталог /etc/init.d и воспользоваться инструментами ОС для установки службы. Можно вручную сделать символьные ссылки в каталоги запуска по указанным ниже рекомендациям.
Все скрипты запускаемых служб в Linux располагаются в /etc/rc.d/init.d или /etc/init.d в зависимости от дистрибутива. Прежде чем приступать к установке службы, проверьте работоспособность сценария
cd /home/jcjs/etc/init.d ./jCjS.mandrake start # Starting jCjS server: [ OK ] ./jCjS.mandrake status # The service jCjSService is not installed and running ./jCjS.mandrake stop # Stopping jCjS server: [ OK ] ./jCjS.mandrake start # Starting jCjS server: [ OK ] ./jCjS.mandrake restart # Stopping jCjS server: [ OK ] # Starting jCjS server: [ OK ]
Теперь можно приступить к установке службы. Сперва нужно ее установить а затем добавить в автозагрузку
srvName=jCjSServiceSMTP # Инсталировать службы с именем $srvName ./jCjSService -i -n $srvName -a "-cfg ../stuff/tests/SMTPClient/jcjs_SMTPClient.xml" # скопировать скрипт запуска в системный каталог cp -f /home/jcjs/etc/init.d/jCjS.mandrake /etc/init.d/$srvName # добавить службу в автозагрузку chkconfig --add $srvName # провериь текущий статус chkconfig --list $srvName # jCjSServiceSMTP 0:выкл 1:выкл 2:выкл 3:вкл 4:вкл 5:вкл 6:выкл
В системах UNIX есть несколько режимов запуска служб
Этот метод считается устаревшим и замещается более современными средствами запуска (см. Systemd), но все ещё поддерживается современными ОС
Для того, чтобы скрипт запускался автоматически во время запуска системы, надо создать символическую ссылку на скрипт и разместить её в каталоге /etc/rc.d/rcN.d или /etc/rc.d/rcN.d, где N – соответствует уровню выполнения скрипта.
Уровень 0 - остановка системы (halt) - работа системы должна быть прекращена;
Уровень 1 - однопользовательский режим работы - система инициализирует минимум служб и даёт единственному пользователю (как правило, суперпользователю) без проведения аутентификации командную строку. Как правило, этот режим используется для восстановления системы;
Уровень 2 - многопользовательский режим - пользователи могут работать на разных терминалах, вход в систему с процессом аутентификации;
Уровень 3 - многопользовательский сетевой режим - в отличие от предыдущего уровня, осуществляется настройка сети и запускаются различные сетевые службы;
Уровень 4 - не имеет стандартного толкования и практически не используется;
Уровень 5 - запуск графической подсистемы - по сравнению с уровнем 3 производится также старт графической подсистемы X11, и вход в систему осуществляется уже в графическом режиме;
Уровень 6 - перезагрузка системы - при включении этого режима останавливаются все запущенные программы и производится перезагрузка.
Чаще всего во время загрузке система использует уровни загрузки 3 или 5. Однако есть некоторая хитрость в названии самой символической ссылки. Например: /etc/rc.d/rc0.d/K60crond и /etc/rc.d/rc3.d/S40crond, указывающие на один скрипт /etc/init.d/crond службы системного журнала. Скрипт, начинающийся с "K" соответствует останову службы, а "S" - запуску. Числа, следующие перед именем службы задают порядок запуска скриптов в директории. Например, скрипт /etc/rc.d/rc3.d/S34syslogd будет запущен до скрипта /etc/rc.d/rc3.d/S40crond, тогда как /etc/rc.d/rc3.d/K60crond до /etc/rc.d/rc3.d/K66syslogd. Можно заметить, что сумма чисел для одной службы равна 100 - это позволяет упорядочить все скрипты в порядке старта, обратном порядку завершения. Создавать самому символические ссылки весьма утомительно, и для этого лучше использовать специальную утилиту chkconfig.
Синтаксис её использования весьма прост:
chkconfig --list [имя сервиса] chkconfig --add <имя сервиса> chkconfig --del <имя сервиса> chkconfig [--level <уровни>] <имя сервиса> < on|off|reset|resetpriorities >
Где имя сервиса - это имя исполняемого скрипта находящегося в /etc/rc.d/init.d
Этот метод используется современными ОС (например Astra Linux v >= 1.5).
Он замещает устаревший механизм запуска служб (см. init.d)
TODO: Добавить описание запуска служб
Для удаления службы необходимо выполнить несколько команд
chkconfig --list jCjS # jCjS 0:выкл 1:выкл 2:выкл 3:вкл 4:вкл 5:вкл 6:выкл chkconfig --del jCjS chkconfig --list jCjS # jCjS 0:выкл 1:выкл 2:выкл 3:выкл 4:выкл 5:выкл 6:выкл cd /home/jcjs/bin # Удаление службы с дефолтным именем jCjSService ./jCjSService -t ./jCjSService -u # Чтобы удалить службы выборочно, достаточно указать # отличное от jCjSService имя ./jCjSService -t -n jCjSServicePHP ./jCjSService -u -n jCjSServicePHP ./jCjSService -t -n jCjSServiceSMTP ./jCjSService -u -n jCjSServiceSMTP
cd /D c:\jCjS2\bin # 1 Остановить службы jCjSService.exe -t jCjSService.exe -t -n newServiceName1 jCjSService.exe -t -n newServiceName2 # 2 Удалить службы jCjSService.exe -u jCjSService.exe -u -n newServiceName1 jCjSService.exe -u -n newServiceName2 # Будут удалены службы с именами jCjSService, newServiceName1 и newServiceName2
export LD_LIBRARY_PATH=/home/jcjs/lib cd /home/jcjs/bin ./jCjSService -h # Выведет: #jCjSService.exe -[a|e|h|i|n|s|u|v|q] # -i(nstall) [account] [password] : Install the service, optionally using given account and password # -i(nstall) [-n(ame) serviceName] : Install the service, optionally using the required service name # -i(nstall) [-a(rgs) "all args"] : Install the service, optionally using the required arguments # -u(ninstall) : Uninstall the service. # -u(ninstall) [-n(ame) serviceName] : Uninstall the service, optionally using the required service name. # -e(xec) : Run as a regular application. Useful for debugging. # -t(erminate) : Stop the service. # -t(erminate) [-n(ame) serviceName] : Stop the service, optionally using the required service name. # -c(ommand) num : Send command code num to the service. # -c(ommand) num [-n(ame) serviceName] : Send command code num to the service using the required service name. # -d(irectory installation) : installation directory. # -v(ersion) : Print version. # -p(ause) [-n(ame) serviceName] : Pause. # -r(esume) [-n(ame) serviceName] : Resume. # -s(tatus) : Status service (default service name 'jCjSService'). # -s(tatus) [-n(ame) serviceName] : Status service, optionally using the required service name. # -Q(uery) : Get the status of all installed services from this instance. # -q(uery) : Get the status of all installed services from this instance without a title. # -Qa(ll) : Get state all installed services. # -qa(ll) : Get state all installed services without a title. # No arguments [-n(ame) serviceName] : Start the service, optionally using the required service name. # -h(elp) : Show this help # #example: # install service # jCjSHttpsProxy -i -n newServiceName -a "-p 9080 -ps 9081" # start service # jCjSHttpsProxy -n newServiceName # stop service # jCjSHttpsProxy -t -n newServiceName # uninstall service # jCjSHttpsProxy -u -n newServiceName