Search code examples
pythoncronscheduled-tasksstartup

How to restart a python script using another?


('The First script' takes input from the user and 'the second script' notify the task.)

I have been trying to restart a python script using another one but i couldn't succeed it after trying to do a few methods. I developed a reminder, notify user when time previously set by the user has arrived, app works on Linux and it have 2 python script. First one is for taking input that given by the user to schedule a task. For example, "Call the boss at 12:30 pm". Then Linux is going to notify it at 12:30 pm. The other one is checking the inputs and notify them when the time comes.

In first script, i am trying to restart the other script when the user give a new task because the script needs to read the new task to notify it. Also I want to terminate the first script when it ran the second script. But the second script must still be working. In first script, I tried these commands to do that:

os.system(f"pkill -f {path2}")
os.system(f"python {path2}")

These aren't work.

Also I want to run the second script at the startup of my os.

Summary:

1- I wanna restart a python script using another one and the first one should be terminated when the second one is run.

2- I wanna run the second script at the startup of my os.

Repository about my reminder app is here.


Solution

  • About 1 :

    Assuming the name of the other script is 2.py (Changeable with the code below), this worked for me pretty well:

    1.py:

    import subprocess
    import os
    import time
    
    OTHER_SCRIPT_NAME = "2.py"
    
    process_outputs = subprocess.getoutput("ps aux | grep " + OTHER_SCRIPT_NAME) # Searching for the process running 2.py
    wanted_process_info = process_outputs.split("\n")[0] # Getting the first line only
    splitted_process_info = wanted_process_info.split(" ") # Splitting the string
    splitted_process_info = [x for x in splitted_process_info if x != ''] # Removing empty items
    pid = splitted_process_info[1] # PID is the secend item in the ps output
    os.system("kill -9 " + str (pid)) # Killing the other process
    exit()
    
    time.sleep(1000) # Will not be called because exit() was called before
    

    2.py:

    import time
    
    time.sleep(100)
    

    About 2:

    In linux, you can execute scripts on startup by writing it into the /etc/rc.local file

    Just run your scripts from the rc.local file and you are good to go:

    /etc/rc.local:

    python '/path/to/your/scripts'