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 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
    Feb 24, 2016 at 10:55
  • 1
    By the way, what's the url for the space backgrounds? 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 :) 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
    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
    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
    Sep 9, 2017 at 22:22
  • 2
    Better approach than the accepted answer. :) 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 :) Feb 23, 2016 at 16:47
  • 2
    It's so much better to use a cron job. 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. 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. Feb 24, 2016 at 7:43
  • 2
    I Just looked: cpu 0.0% What tax are we talking about? Feb 24, 2016 at 7:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.