1

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:

#!/bin/bash
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):

#!/bin/bash
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?

5
  • 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 Commented Feb 23, 2019 at 9:16
  • You can set SHELL=/bin/bash in your crontab which makes life easier.
    – Freddy
    Commented Feb 23, 2019 at 9:27
  • I don't know how it finds the python script: You don't give an absolute path. Commented Feb 23, 2019 at 9:54
  • @SergiyKolodyazhnyy The script has a hash-bash-slash-bin-slash-bash #!/bin/bash, so a modern sh will launch bash. Commented Feb 23, 2019 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 ). Commented Feb 23, 2019 at 10:30

1 Answer 1

1

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.)

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

You must log in to answer this question.

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