systemd 서비스를 사용하여 bash 스크립트를 실행하는 방법은 무엇입니까?

systemd 서비스를 사용하여 bash 스크립트를 실행하는 방법은 무엇입니까?

systemd를 통해 그래픽 애플리케이션을 시작하고 싶습니다. 이전에 udev를 통해 이 작업을 시도했지만 규칙이 종료된 후 애플리케이션이 종료되었습니다. systemd를 통해 직접 응용 프로그램을 실행하면 작동하지만 일부 제약 조건으로 응용 프로그램을 시작하는 스크립트를 실행하면 작동하지 않습니다.

내 서비스 파일은 다음과 같습니다.

[Unit]
Description=App starter

[Service]
Type=oneshot
RemainAfterExit=yes
Environment=DISPLAY=:0
Environment=HOME=/home/user/
ExecStart=/home/user/runApp

[Install]
WantedBy=multi-user.target

Journalctl -xe가 나에게 준

Sep 25 13:50:00 host systemd[1]: Starting App starter...
Subject: A start job for unit app.service has begun execution
Defined-By: systemd
Support: https://forum.manjaro.org/c/support
 
A start job for unit xournalpp.service has begun execution.
 
The job identifier is 19196.
Sep 25 13:50:00 host runApp[313232]: App is not running
Sep 25 13:50:00 host systemd[1]: app.service: Main process exited, code=exited, status=1/FAILURE
Subject: Unit process exited
Defined-By: systemd
Support: https://forum.manjaro.org/c/support
 
An ExecStart= process belonging to unit xournalpp.service has exited.
 
The process' exit code is 'exited' and its exit status is 1.
Sep 25 13:50:00 host systemd[1]: app.service: Failed with result 'exit-code'.
Subject: Unit failed
Defined-By: systemd
Support: https://forum.manjaro.org/c/support
 
The unit xournalpp.service has entered the 'failed' state with result 'exit-code'.
Sep 25 13:50:00 host systemd[1]: Failed to start App starter.
Subject: A start job for unit app.service has failed
Defined-By: systemd
Support: https://forum.manjaro.org/c/support
 
A start job for unit app.service has finished with a failure.
 
The job identifier is 19196 and the job result is failed.

여기에 스크립트가 있습니다. 어쩌면 백그라운드에서 실행되기 때문일까요 &? 스크립트를 재사용하고 싶기 때문에 이것이 필요합니다.

#!/bin/bash

  if pgrep app
  then
      echo App is running
          wmctrl -x -a app
          wmctrl -x -r app -b "add,maximized_vert,maximized_horz"
          
  else
          echo App is not running
          /usr/bin/app & disown
  fi

답변1

어쩌면 권한 문제일 수도 있습니다.

/home/user다른 사용자는 일반적으로 이러한 항목에 액세스할 수 없으며 apparmor 및 selinux와 같은 보안 시스템은 일반적으로 이러한 사용을 금지합니다.

systemd에서 스크립트를 사용하려면 /usr/local/bin.

관련 정보