running python script as a systemd service

前端 未结 2 573
太阳男子
太阳男子 2020-12-16 05:42

I have a python script myScript.py which is writing on a file every 2 second. But when I want to run this script as a systemd service, service work

相关标签:
2条回答
  • 2020-12-16 06:16

    This is the procedure of creating a service from your code:

    At first, add the following shebang in above of your_script.py:

    #!/usr/bin/env python
    

    I use the following instruction for my own services creation:

    Suppose your service name is "test", then create files below:

    test.service

    [Unit]
    SourcePath=/etc/init.d/test
    [Service]
    ExecStart=/etc/init.d/test start
    ExecStop=/etc/init.d/test stop
    

    test.sh

    #!/usr/bin/env bash
    
    # Quick start-stop-daemon example, derived from Debian /etc/init.d/ssh
    set -e
    
    # Must be a valid filename
    NAME=this_is_a_test
    PIDFILE=/var/run/$NAME.pid
    #This is the command to be run, give the full pathname
    DAEMON=/home/Your_User_Name/Your_path/your_script.py
    
    case "$1" in
      start)
            echo -n "Starting daemon: "$NAME
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS
            echo "."
        ;;
      stop)
            echo -n "Stopping daemon: "$NAME
        start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
            echo "."
        ;;
      restart)
            echo -n "Restarting daemon: "$NAME
        start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDFILE
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS
        echo "."
        ;;
    
      *)
        echo "Usage: "$1" {start|stop|restart}"
        exit 1
    esac
    
    exit 0
    

    Then I create an installation for the above configuration:

    install.sh

    #!/usr/bin/env bash
    
    echo "create a test service ..."
    cp test.sh /etc/init.d/test
    cp test.service /etc/systemd/system
    chmod +x /etc/init.d/test
    # sed -i "s/Your_User_Name/you_path/g" /etc/init.d/test
    echo "created the test service"
    

    Finally, do:

    Set the access permission to your_script.py file:

    $ chmod 755 <your_script.py>
    

    Then install the service with:

    $ sudo bash ./install.sh
    

    Then trigger the service with systemctl or restart your machine if needed.

    Then start your service:

    $ sudo service test start
    

    You can check its status:

    $ sudo service test status
    

    [NOTE]:

    • Replace the test, Your_User_Name, Your_path and your_script.py static variables with your variables in the above scripts.
    • Difference between a service and systemctl

    0 讨论(0)
  • 2020-12-16 06:29

    maybe it helps to add a Working directory at myscript.service:

    [Service]
    (...)
    WorkingDirectory=/home/pi/your_working_directory
    

    Best Regards Kilian

    0 讨论(0)
提交回复
热议问题