프로그램을 실행하려면 systemd 서비스를 통해 쉘 스크립트에 연결하십시오.

프로그램을 실행하려면 systemd 서비스를 통해 쉘 스크립트에 연결하십시오.

특정 시간에 프로그램(obs)을 실행하고 이를 위해 쉘 스크립트를 가리키는 시스템 서비스 파일을 작성한 다음 타이머로 파일을 실행하고 싶습니다.

파일을 실행했는데 스크립트가 실행되었습니다. 하지만 어떤 이유로든 실행되지 않았습니다.

서비스 파일:

[Unit]
Description=Starting Yoga recording on OBS

[Service]
ExecStart=/usr/local/bin/script.sh

script.sh:

#!/bin/bash

echo "yo working" >> /home/user/1.txt

/usr/bin/obs --minimize-to-tray --startrecording

echo "or is it?" >> /home/user/2.txt

문자열은 텍스트 파일에 기록되고 script.sh터미널을 통해 실행될 때 작동하므로 서비스 파일에 문제가 있다고 확신합니다.

그런데 도움이 된다면 Arch 배포판을 사용하고 있습니다.

답변1

OBS는 GUI 애플리케이션인 것 같습니다. systemd스크립트 실행은 잘 작동하지만 GUI 애플리케이션에는 약간의 기교가 필요합니다.

먼저, --user버스를 타세요. 이는 OBS가 다음과 같이 실행됨을 의미합니다., 루트가 아닌. 명백한 보안 이점 외에도 사용자 버스에서 실행하면 서비스가 $DISPLAY사용 중인 환경과 위치를 포함하여 사용자 환경을 상속할 수 있습니다 $XAUTHORITY. 이는 또한 bash를 실행하면 .bashrc시스템 버스에서는 발생하지 않는 개인 데이터가 로드된다는 것을 의미합니다 . 이렇게 하려면 해당 systemd단위를 에서 로 /etc/systemd/system/이동 하십시오 ~/.config/systemd/user/.

특정 시간에 프로그램(obs)을 실행하고 싶습니다

이를 위해 systemd 타이머를 사용하십시오.

#~/.config/systemd/user/obs.timer
[Unit]
Description=Timer for OBS

[Timer]
# Run obs.service every 2 hours
OnCalendar=*-*-* 00,02,04,06,08,10,12,14,16,18,20,22:00:00

[Install]
WantedBy=timers.target

obs.service2시간마다 트리거됩니다. 그런 다음 obs.service변경하지 않고 그대로 둘 수 있습니다.

# ~/.config/systemd/user/obs.service
[Unit]
Description=Starting Yoga recording on OBS

[Service]
ExecStart=/usr/local/bin/script.sh

부팅 시 시작되게 하려면:

$ systemctl --user enable obs.timer
$ systemctl --user start obs.timer

타이머가 서비스를 트리거하므로 서비스를 명시적으로 시작하거나 활성화할 필요가 없습니다.

서비스를 즉시 실행하려면 언제든지 직접 시작할 수 있습니다.

$ systemctl --user start obs.service

관련 정보