我想在特定时间运行一个程序(obs),因为我想编写一个指向 shell 脚本的 systemd 服务文件,然后我将由计时器执行。
我已经运行了该文件,它确实执行了脚本……但由于某种原因没有执行该程序。
服务文件:
[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 发行版上
我怀疑 OBS 是一个 GUI 应用程序。
systemd
运行脚本很好,但 GUI 应用程序需要一些技巧。首先,使用
--user
公共汽车。这意味着 OBS 将以您的身份运行,而不是以 root 身份运行。除了明显的安全优势之外,在用户总线上运行还可以让您的服务继承您的用户环境,包括$DISPLAY
您正在使用的环境以及您所在的$XAUTHORITY
位置。这也意味着运行 bash 将加载您的个人.bashrc
信息,这不会在系统总线上发生。为此,请将这些systemd
单位从/etc/systemd/system/
移至~/.config/systemd/user/
。为此使用 systemd 计时器:
obs.service
这将每两个小时触发一次。然后你obs.service
可以保持不变:要使其在启动时启动:
计时器将触发您的服务,因此您不必显式启动或启用您的服务。
如果您希望该服务现在运行,那么您可以随时自己启动它: