I've created a script that has to be executed on boot and has to run another script (which sets some variables) before executing other commands.

After writing the script, I've successfully executed it in the console, but if the script is added to crontab, the other script inside this one is not executed.

The script (main-script.sh) that has been added to crontab is the following:

source /home/pi/test-script.sh
python mycustompythonscript.py

and the test-script.sh is the following (I replaced the actual script with this one for testing):

echo "greetings from test script" > test.txt

So when i run main-script.sh from console, test-script.sh is executed (the file is created) and the python script is executed. Upon rebooting the RPi, however, the python script is executed, but the test-script.sh is not executed (test.txt file is not created).

Does anyone know what could be the possible reason that test-script.sh is not executed in case the main-script.sh is executed by cron?

  • 1
    Depending on how you're executing main-script.sh in crontab, it might be executed via /bin/sh instead of /bin/bash. In case of source command it's bash-specific. Try to replace that with . /home/pi/test-script.sh - that should work across the board on all POSIX compliant, bourne-like shells. Let me know if that works for you, and if it does I'll post it as a proper answer – Sergiy Kolodyazhnyy Feb 23 at 9:16
  • You can set SHELL=/bin/bash in your crontab which makes life easier. – Freddy Feb 23 at 9:27
  • I don't know how it finds the python script: You don't give an absolute path. – ctrl-alt-delor Feb 23 at 9:54
  • @SergiyKolodyazhnyy The script has a hash-bash-slash-bin-slash-bash #!/bin/bash, so a modern sh will launch bash. – ctrl-alt-delor Feb 23 at 10:22
  • @ctrl-alt-delor As I mentioned in the comment, "Depending on how you're executing main-script.sh". A sh /path/to/main.sh definitely won't like bashisms (unless it's CentOS where /bin/sh is /bin/bash ). – Sergiy Kolodyazhnyy Feb 23 at 10:30

You need to specify an absolute path for test.txt. It won't put it where you expect.

do sudo find / -iname "test.txt" to find it.

(The python script should also have a full path name.)

  • python seems to be in /usr/bin, so it's found. – Freddy Feb 23 at 10:24
  • 1
    @Freddy Python script, not python interpreter. – ctrl-alt-delor Feb 23 at 10:25
  • 1
    Oops, you're right! – Freddy Feb 23 at 10:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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