Python Forum

Full Version: Script won't run at boot
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi,

The code below which speaks a wellcome msg if there's an internet connection, runs manually but not at boot through crontab.

Where did I go wrong?
TIA

#!/usr/local/bin/python3

from subprocess import call
from time import sleep

domain = ('www.google.com')

def _call():
    call(['espeak "Welcome John" 2>/dev/null'], shell=True)

def ping(host):
    ret = call(['ping', '-c', '3', '-W', '5', host], stdout=open('/dev/null', 'w'), stderr=open('/dev/null', 'w'))
    return ret

if __name__ == "__main__":
    p = 1
    while p == 1:
      p = ping(domain)
      if(p == 0):
        _call()
      sleep(.3)
what does your crontab entry look like?
Impossible to say really. What are the logs for cron saying? I imagine you'll find them under /var/log somewhere.
Line in crontab: "@reboot python3 /home/pi/wellcome.py"

No errors in boot.log, system nor in messages
What about cron's logs specifically? On my system, they're in /var/log/cron - YMMV.
Cry I don't see that. I'm running linux on a raspberry zero W board.
I guess espeak cannot be called during boot.

This code works better.

#!/usr/bin/env python

import os, sys, socket
from subprocess import call
from time import sleep

booted = "UEFI" if os.path.exists("/sys/firmware/efi") else "BIOS"

def is_connected():
     try:
         socket.create_connection(("192.168.0.1", 80))
         return True
     except OSError:
         pass
     return False

if __name__ == "__main__":
    p = 1
    while p == 1:
       if(booted == 'BIOS' and is_connected() == True):
         p = 0
         call(['espeak "Welcome John" 2>/dev/null'], shell=True)
       sleep(.3)