每 5 分钟运行一次 .sh

Ale*_*yov 12 wallpaper bash scripts schedule

我有一个 .sh 脚本,可以从日本卫星的服务器下载照片并将其设置为背景图片。我已将其放入启动列表,但如何每​​隔 5 分钟自动运行一次?

hee*_*ayl 26

把它放在你的crontab.

cron通过以下方式打开您的桌子:

crontab -e
Run Code Online (Sandbox Code Playgroud)

现在添加:

*/5 * * * * /path/to/script.sh
Run Code Online (Sandbox Code Playgroud)

不要忘记事先使脚本可执行。


由于您的脚本依赖于 X,因此将 加入DISPLAY到脚本环境中可能是一个好主意:

*/5 * * * * DISPLAY=:0 /path/to/script.sh
Run Code Online (Sandbox Code Playgroud)

替换:0为您的实际DISPLAY(可以echo $DISPLAY从交互式会话中找到)。

如果需要,您也可以添加XAUTHORITY环境变量:

*/5 * * * * DISPLAY=:0 XAUTHORITY="~/.Xauthority" /path/to/script.sh
Run Code Online (Sandbox Code Playgroud)

同样,您可以通过 找到该值echo $XAUTHORITY

  • 我喜欢这种方法而不是“懒惰的方法”,因为我知道 cron,但需要一些进修课程。这正是我所做的,非常感谢!:) (2认同)
  • 比公认的答案更好的方法。:) (2认同)

Jac*_*ijm 14

懒惰的选择

如果您想要简单的方法,并且不必找出要设置的环境变量:

  • 确保您的脚本包含shebang
  • 使其可执行
  • 将以下内容添加到启动应用程序:

    /bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"
    
    Run Code Online (Sandbox Code Playgroud)

    Dash > 启动应用程序 > 添加。添加命令:

    /bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"
    
    Run Code Online (Sandbox Code Playgroud)

解释

如果您从自己的环境(例如从终端窗口或从启动应用程序)运行脚本,将设置许多环境变量。cron但是,使用一组有限的环境变量运行您的脚本。
由于您的脚本无疑使用了以下gsettings命令:

gsettings get org.gnome.desktop.background picture-uri <wallpaper>
Run Code Online (Sandbox Code Playgroud)

要设置墙纸,几乎可以肯定,从cron.

“懒惰的解决方案”的缺点纯粹是理论上的。几乎连续休眠的命令对您的系统毫无意义

附加信息; 或者

阅读这篇文章,根据过去的经验,我很确定DBUS_SESSION_BUS_ADDRESS需要设置环境变量。

为此,请在脚本开头(shebang 下方)添加以下部分:

PID=$(pgrep gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$PID/environ|cut -d= -f2-)
Run Code Online (Sandbox Code Playgroud)

然后你应该能够成功地从cron.

但是,您可以很好地避免喧嚣,并选择懒惰的选项。

  • 使用 cron 作业要好得多。 (2认同)
  • 我刚看了一下:`cpu 0.0%` 我们在说什么税? (2认同)