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
  Run Python Script From My VPS? digitalmatic7 1 22 Yesterday, 10:09 PM
Last Post: metulburr
  running python script from shell invoked with os.system("x-terminal-emulator -e /bin/ markhaus 1 25 Yesterday, 09:56 PM
Last Post: Larz60+
  How to retrieve and save attachments returned by SOAP web service ashwsrin 0 27 Yesterday, 07:12 AM
Last Post: ashwsrin
  Sorting algorithm issues Clunk_Head 2 92 Feb-17-2019, 03:58 AM
Last Post: Clunk_Head
  Executing python script from SQL Server agent job getting error msavoy 1 83 Feb-15-2019, 08:37 PM
Last Post: Larz60+
  Fixing indentation issues. MuntyScruntfundle 9 218 Feb-02-2019, 05:55 PM
Last Post: snippsat
  run setup.exe from python script with special parameters asheru93 0 70 Feb-01-2019, 03:11 PM
Last Post: asheru93
  Integrating Python Script for Android App everythingisenergy 0 75 Jan-15-2019, 07:39 PM
Last Post: everythingisenergy
  WordPress and Python Script Corate 3 171 Jan-06-2019, 10:22 AM
Last Post: buran
  Using for loop in Python lists script? NLittle17 4 164 Jan-05-2019, 07:08 PM
Last Post: ichabod801

Forum Jump:


Users browsing this thread: 1 Guest(s)