systemd 서비스를 사용하여 로그인하기 전에 통합 원격 서버를 시작하십시오.

systemd 서비스를 사용하여 로그인하기 전에 통합 원격 서버를 시작하십시오.

지금 달리려고 하는데통합 원격 서버로그인하기 전. (로그인이 필요합니다)

로그인 후 성공적으로 실행해서 잘 작동합니다.

이건 내 systemd .service파일이야

[Unit]
Description=Unified Remote Server
After=syslog.target network.target

[Service]
Type=forking
User=root
Group=sudo
Environment=HOME=~
Environment=OPENSSL_CONF=/etc/ssl/
ExecStart=/opt/urserver/urserver-start --no-manager --no-notify
ExecStop=/opt/urserver/urserver-stop

[Install]
WantedBy=default.target

오류 출력

   Loaded: loaded (/lib/systemd/system/urserver.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Fri 2020-07-17 01:07:06 EDT; 1h 52min ago

urserver-start[8014]: 140156550736640:error:25070067:DSO support routines:DSO_load:could not load the shared library:dso_lib.c:244:
urserver-start[8014]: 140156550736640:error:0E07506E:configuration file routines:MODULE_LOAD_DSO:error loading dso:conf_mod.c:285:module=ssl_
urserver-start[8014]: 140156550736640:error:0E076071:configuration file routines:MODULE_RUN:unknown module name:conf_mod.c:222:module=ssl_con
urserver-start[8014]: skipping manager
urserver-stop[8032]: cat: /.urserver/urserver.pid: No such file or directory
urserver-stop[8032]: process not detected
urserver-stop[8032]: rm: cannot remove '/.urserver/urserver.pid': No such file or directory
systemd[1]: urserver.service: Control process exited, code=exited, status=1/FAILURE
systemd[1]: urserver.service: Failed with result 'exit-code'.
systemd[1]: Failed to start Unified Remote Server.

두 가지 오류가 있는 것 같습니다.

  1. 말 그대로 환경 변수가 올바르게 구문 분석되지 않은 cat: /.urserver/urserver.pid: No such file or directory것 같습니다 .$HOME
  2. 일부 종속성이 아직 로드되지 않은 것 같습니다. 로드되었는지 어떻게 확인할 수 있나요?

답변1

Buster가 포함된 Raspberry Pi 4B에서 서비스 urserversystemd시작하려고 하면 다른 오류가 발생합니다 . 귀하의 문제와 전혀 관련이 없을 수도 있습니다.

이것은 나에게 효과적이었습니다. 핵심은 systemd가 이를 무시하도록 종료 0으로 시작 스크립트를 종료하는 것입니다 triggerhappy.

urserver.service:

[Unit]
Description=Unified Remote Server
After=syslog.target network.target

[Service]
Type=forking
User=root
Group=root
ExecStart=/opt/urserver/urserver-start --no-notify
ExecStop=/opt/urserver/urserver-stop
SyslogIdentifier=urserver

[Install]
WantedBy=multi-user.target

서버 시작:

#!/bin/sh


#
# Path to installation directory
#
EXEC_PATH="/opt/urserver/urserver"
PID_PATH="$HOME/.urserver/urserver.pid"
ICON_PATH="/usr/share/icons/hicolor/96x96/apps/urserver.png"
REMOTES_PATH="$HOME/.urserver/remotes"
BACKUP_PATH="$HOME/.urserver/backup"


#
# Check arguments
#
NO_COPY=false
NO_MANAGER=false
NO_NOTIFY=false

for var in "$@"
do
       if [ "$var" = "--no-copy" ]; then
               NO_COPY=true
       elif [ "$var" = "--no-manager" ]; then
               NO_MANAGER=true
       elif [ "$var" = "--no-notify" ]; then
               NO_NOTIFY=true
       fi
done


#
# Copy user files
#
if ! "$NO_COPY" = true; then
   echo "copying user files"
   mkdir -p "$HOME/.config/autostart/"
   cp -uf /opt/urserver/urserver-autostart.desktop $HOME/.config/autostart/urserver.desktop

   echo "backup remotes"
   mkdir -p $BACKUP_PATH/
   cp -af $REMOTES_PATH/. $BACKUP_PATH/

   echo "create custom folder"
   mkdir -p $REMOTES_PATH/custom/

   echo "copying remotes"
   rm -rf $REMOTES_PATH/remotes/
   rm -rf $REMOTES_PATH/bundled/
   mkdir -p $REMOTES_PATH/bundled/
   cp -af /opt/urserver/remotes/. $REMOTES_PATH/bundled/
else
   echo "skipping copy"
fi


#
# Start the server
#
echo "starting server"
mkdir -p "$HOME/.urserver"
$EXEC_PATH --remotes=$REMOTES_PATH --daemon


#
# Open the web manager
#
if ! "$NO_MANAGER" = true; then
   echo "opening manager"
   sleep 1
   xdg-open http://localhost:9510/web 2> /dev/null
else
   echo "skipping manager"
fi
exit 0

답변2

먼저 삭제하겠습니다 Environment=HOME=~.

systemd자동으로 설정되므로 $HOME기본값이 아닌 한 이를 지정할 필요가 없습니다. 사용자가 이면 아마도 로 설정될 것으로 root생각됩니다 . 또한 홈 디렉터리에 대한 바로가기 이지만 셸 외부에서는 의미가 없습니다. 모든 구문이 지원되는 것은 아니며 지원되지 않습니다. 또한 .​​$HOME/root~shsystemdshsh&&|ExecStart=

Environment=줄을 제거하면 모든 문제가 해결될 수 있습니다. 하지만 그렇지 않은 경우에는 다음과 같은 몇 가지 참고할 사항이 있습니다.


User=root
Group=sudo

이건 좀 이상해요. User=root시스템 버스에서 실행될 때 이미 암시적이므로 중복됩니다. 그룹이 소유한 새 파일을 생성할 수 있다는 Group=sudo점에서만 유용하다고 생각합니다 . 하지만 이는 실제로 그룹의 구성원이고 기본적 으로 그룹에서 읽기/쓰기 가능한 새 파일을 생성하는 sudo경우에만 가능할 수 있습니다 . 아마도 큰 영향을 미치지는 않겠지만 이를 제거할 수 있다고 생각합니다.rootsudoumask


귀하의 서비스는 이므로 Type=forking다음을 추가해 보세요.

PIDFile=/root/.urserver/urserver.pid

이는 시스템이 서비스의 주요 프로세스를 안정적으로 식별하는 데 도움이 됩니다.


이러한 DSO_load오류는 애플리케이션이 모듈을 동적으로 로드할 수 없음을 나타냅니다. 메시지가 잘린 것처럼 보이지만 관련이 있습니다 ssl.

을 살펴보면 변수가 구성 파일이 포함된 디렉터리가 아니라 구성 파일을 가리켜야 한다는 man openssl것을 알았습니다 . OPENSSL_CONF이 줄을 제거하거나 다음과 같은 것을 사용해 보십시오:

Environment=OPENSSL_CONF=/etc/ssl/openssl.cnf

이것이 기본 위치일 수 있으므로 이 변수를 설정할 필요가 없을 수도 있습니다.

관련 정보