13

I have a .sh script that downloads a photo from Japanese satellite's server and sets it as a background picture. I've put it into startup list, but how do I run it every, like, 5 minutes, automatically?

3
  • 1
    Try out cronmaker.com , there you can make cron-expressions and put it with crontab -e Commented Feb 23, 2016 at 16:09
  • 2
    Does the picture even change every 5 minutes? Try using an interval that creates less unnecessary load on the target server. Or make sure you only download if the file is really changed.
    – til_b
    Commented Feb 24, 2016 at 10:55
  • 1
    By the way, what's the url for the space backgrounds? Commented Mar 1, 2016 at 9:58

2 Answers 2

29

Put it in your crontab.

Open your cron table by:

crontab -e

Now add:

*/5 * * * * /path/to/script.sh

Don't forget to make the script executable beforehand.


As your script depends on X, probably will be a good idea to add the DISPLAY to the script's environment:

*/5 * * * * DISPLAY=:0 /path/to/script.sh

Replace :0 with your actual DISPLAY (can be found by echo $DISPLAY from interactive session).

If needed, you can add the XAUTHORITY environment variable too:

*/5 * * * * DISPLAY=:0 XAUTHORITY="~/.Xauthority" /path/to/script.sh

Again you can find the value by echo $XAUTHORITY.

13
  • 1
    Not sure if it works with limited environment variables of cron, but let' s see if OP mentions it works :) Commented Feb 23, 2016 at 16:12
  • 1
    @AleksanderMahnyov Please edit your question to add the script, hard to say without seeing the contents..possibly a DISPLAY (and/or XAUTHORITY) issue..
    – heemayl
    Commented Feb 23, 2016 at 16:29
  • 1
    @Kartagis Cron can not handle seconds, also you are trying to do for hours which is still syntactically wrong..
    – heemayl
    Commented Feb 24, 2016 at 12:24
  • 2
    I love this method rather than the "lazy method", because I knew about cron, but needed a bit of a refresher course. This is exactly what I did, thanks a lot! :)
    – ZaxLofful
    Commented Sep 9, 2017 at 22:22
  • 2
    Better approach than the accepted answer. :) Commented Jun 5, 2018 at 11:39
17

The lazy option

If you want the easy way, and avoid having to find out which environment variable to set:

  • Make sure your script includes the shebang
  • Make it executable
  • Add the following to Startup Applications:

    /bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"
    

    Dash > Startup Applications > Add. Add the command:

    /bin/bash -c "sleep 15 && while true; do <path_to_your_script.sh> ; sleep 300; done"
    

Explanation

If you run the script from your own environment (e.g. from a terminal window or from Startup Applications), a number of environment variables will be set. cron however runs your script with a limited set of environment variables.
Since your script no doubt uses the gsettings command:

gsettings get org.gnome.desktop.background picture-uri <wallpaper>

to set the wallpaper, almost certainly the command will break when run from cron.

The downside of "the lazy solution" is purely theoretical. A command that sleeps practically continuously means nothing to your system.

Additional info; alternatively

Reading this post, and from experiences in the past, I am pretty sure the DBUS_SESSION_BUS_ADDRESS environment variable needs to be set.

To do so, add the following section at the beginning of your script (below the shebang):

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

Then you should be able to successfully run it from cron.

You could however very well save the hustle, and choose the lazy option.

9
  • @AleksanderMahnyov You' re welcome. Glad it works :) Commented Feb 23, 2016 at 16:47
  • 2
    It's so much better to use a cron job. Commented Feb 24, 2016 at 7:01
  • 1
    @LukaRamishvili Thanks for the comment. However: a. And why is that? a sleeping command means nothing to your system. b. I even included the option. Commented Feb 24, 2016 at 7:06
  • 1
    Otherwise, nice research about the gnome session variables, it would help the OP a lot, since that would be required either way. Commented Feb 24, 2016 at 7:43
  • 2
    I Just looked: cpu 0.0% What tax are we talking about? Commented Feb 24, 2016 at 7:44

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .