특정 시간에 프로그램(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.service
2시간마다 트리거됩니다. 그런 다음 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