Bottom Page

Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
 Issues with Python script as service
#1
Setup details:
RPI Version: Raspberry Pi 2 Model BV1.1
Python Version: 2.7

I have created a small program to control the fan and lights in my hydroponic room. I am using 8 channel relay board with external power supply. Everything works fine if I run script using below command
‘sudo python /home/pi/lionsfort/hydroponic.py’. To stop the execution I type CTRL+C then script stops properly with relay getting power off.

Since I wanted script to start with Raspberry pi, I am running ‘hydroponic.py’ script as a service. But with script running as service created below problems
1. Only console logs getting written and file logs are empty.
2. Script starts ok with relay functioning properly, but when I stop the service (sudo systemctl stop hydroponic.service) relay wont get power off.
3. Script start with raspberry pi power on but also start with every new PUTTY session. There should be only one instance of script running irrespective PUTTY session.

Note: If run script using ‘sudo python /home/pi/lionsfort/hydroponic.py’ I don’t face any of above problems!!

Followed below process to run script as a service on boot: (ref http://www.diegoacuna.me/how-to-run-a-sc...an-jessie/)
1. cd /lib/systemd/system/
2. sudo nano hydroponic.service
3. hydroponic.service content
[Unit]
Description=Hydroponic
After=multi-user.target

[Service]
Type=simple
ExecStart=/usr/bin/python /home/pi/lionsfort/hydroponic.py
Restart=on-abort

[Install]
WantedBy=multi-user.target

4. To activate it, I ran below commands
a. sudo chmod 644 /lib/systemd/system/ hydroponic.service
b. chmod +x /home/pi/lionsfort/hydroponic.py
c. sudo systemctl daemon-reload
d. sudo systemctl enable hydroponic.service
e. sudo systemctl start hydroponic.service

logging.json

--
Satish Gunjal
Quote
#2
Systemd logs into syslog, try to run:

sudo journalctl -u hydroponic
Also check the /var/log folder, maybe the stdout of your service is writing in the /var/log/message file.

About file logs, use the full path when writing them.
/home/pi/lionsfort/hydroponic.log
Quote
#3
@gontajones Logs issue resolved after giving the full path of the log file. Thanks! Also please help me on issue 2: command " sudo systemctl stop hydroponic.service" stops service but relays are still power on!
Quote
#4
Good, you're welcome!

About the "systemctl stop" command, it sends a SIGTERM to the service.
You'll have to get this signal (try: except:), reset the relays (clear GPIOs) and then exit.

Maybe your code now is just exiting.
Quote
#5
Code snippet as below. Please suggest where to make change?

try:
    initialize()
    while True:	
        hourMinute = datetime.now().strftime('%H:%M')
        logger.info("Main()> hourMinute= " + hourMinute)
	
	humidityAndTemp();
	
        if(iState == 'off'):
            startInletFan(hourMinute)
        else:
            stopInletFan(hourMinute)            
        
	if(eState == 'off'):
            startExhaustFan(hourMinute)
        else:
            stopExhaustFan(hourMinute)
        
	if(vState == 'off'):
            startVentilationFan(hourMinute)
        else:
            stopVentilationFan(hourMinute)

	if(pState == 'off'):
            startPump(hourMinute)
        else:
            stopPump(hourMinute)
	
	time.sleep(30)

# End program cleanly with keyboard
except KeyboardInterrupt:
    print " Quit"

# Reset GPIO settings
GPIO.cleanup()
Quote
#6
Could you edit your post (code) using the python tags?
Just click on "Insert python" at text formatting bar when editing (writing) posts.
Quote
#7
done.
Quote
#8
import time
import signal
import sys

def handler(signum, frame):
    print 'Got SIGTERM!'
    sys.exit(0) # raises a SystemExit exception

# Register a handler (function) for the SIGTERM signal
signal.signal(signal.SIGTERM, handler)

try:
    initialize()
    while True:
        hourMinute = datetime.now().strftime('%H:%M')
        logger.info("Main()> hourMinute= " + hourMinute)

        humidityAndTemp();

        if(iState == 'off'):
            startInletFan(hourMinute)
        else:
            stopInletFan(hourMinute)

        if(eState == 'off'):
            startExhaustFan(hourMinute)
        else:
            stopExhaustFan(hourMinute)

        if(vState == 'off'):
            startVentilationFan(hourMinute)
        else:
            stopVentilationFan(hourMinute)

        if(pState == 'off'):
            startPump(hourMinute)
        else:
            stopPump(hourMinute)

        time.sleep(30)

# End program cleanly with keyboard or sys.exit(0)
except KeyboardInterrupt:
    print " Quit (Ctrl+C)"
except SystemExit:
    print " Quit (SIGTERM)"

# Reset GPIO settings
GPIO.cleanup()
Quote
#9
thanks. all issues resolved!
Quote

Top Page

Possibly Related Threads...
Thread Author Replies Views Last Post
  Redircet output of Python script to .txt file gurbhej_singh 7 184 7 hours ago
Last Post: woooee
  Issues parsing the response from a request garnold 3 139 May-14-2019, 12:39 PM
Last Post: snippsat
  Is there any way to convert a python script (with Tkinter module), to a .exe (Windows moste 3 98 May-12-2019, 12:02 PM
Last Post: snippsat
  Package python script which has different libraries as a single executable or script tej7gandhi 1 63 May-11-2019, 08:12 PM
Last Post: keames
  How to launch a program through python script - Mac OS Mojave Aurimas 2 130 May-11-2019, 10:20 AM
Last Post: kritesh
  Batch file not running python script in task scheduler davork 3 100 May-09-2019, 12:53 PM
Last Post: Gribouillis
  Python script that calls jamfHelper binary kennethdean2010 19 542 May-07-2019, 03:50 PM
Last Post: kennethdean2010
  run python script on startup? korenron 1 90 May-06-2019, 09:18 PM
Last Post: snippsat
  Please Need help with python script jstelmach 3 211 Apr-02-2019, 10:42 PM
Last Post: Larz60+
  resolving issues with path aster 5 259 Apr-01-2019, 09:54 AM
Last Post: snippsat

Forum Jump:


Users browsing this thread: 1 Guest(s)