Python Forum
Python Script Spawned by Cron or Systemd doesn't write files..? - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Python Script Spawned by Cron or Systemd doesn't write files..? (/thread-18617.html)



Python Script Spawned by Cron or Systemd doesn't write files..? - johnnyrobot - May-24-2019

Hi all,

I've written a Raspberry Pi application (Ubuntu Mate) that's essentially a timed camera. Every 30 seconds, it snaps an image and writes it to disk.

When I start the application manually from the terminal, it works as expected.

When I configure the script to execute automatically at startup, (using crontab or systemd - It needs to be executed as root) the script runs without any error, but no images are written to the disk.

Any idea of what may be going on?

My script:
import time
from camera import *
import cv2

count = 0

while True:
    # Open camera
    Camera01.GiGe.Open()

    # Turn on Light
    Camera01.Light.fill((255, 255, 255, 255))

    # Snap Image
    image = Camera01.GiGe.GrabOne(1000)

    # Convert image to OpenCV Array
    image = cv2.cvtColor(image.Array, cv2.COLOR_BAYER_BG2BGR)

    # Save image to disk
    cv2.imwrite('saved_images/image'+str(count)+'.png', image)

    # Turn off Light
    Camera01.Light.fill((0, 0, 0, 0))

    # Close camera
    Camera01.GiGe.Close()

    # Increment counter
    count = count + 1

    time.sleep(30)
The camera class:
import neopixel
import board
from pypylon import pylon

class Camera01:
    GiGe = pylon.InstantCamera(pylon.TlFactory.GetInstance().CreateFirstDevice())
    Light = neopixel.NeoPixel(board.D18, 16, bpp=4, auto_write=True)
My crontab:
@reboot python3 /var/www/camera/main.py > /var/log/cron/crontab.log 2>&1


RE: Python Script Spawned by Cron or Systemd doesn't write files..? - johnnyrobot - May-24-2019

Dance I figured it out, I never specified a working directory. When I setup the application as a service, there is a "WorkingDirectory" assignment that I was missing. Once specified, it's working as it should.

[Unit]
Description=Time lapse camera application

[Service]
WorkingDirectory=/var/www/camera/
User=root
ExecStart=/usr/bin/python3 /var/www/camera/main.py
Restart=always

[Install]
WantedBy=multi-user.target



RE: Python Script Spawned by Cron or Systemd doesn't write files..? - Larz60+ - May-24-2019

Please mark as solved (this helps moderators when scanning so many queries)
Thanks