How To Run Python Script In Linux

How To Run Python Script In Linux

Reading time1 min
#Python#Linux#Automation#PythonScripts#LinuxAutomation#Systemd

Mastering Python Script Execution on Linux: Beyond the Basics for Seamless Automation

Most guides stop at a simple python script.py command — but the real mastery lies in understanding environment setup, permissions, and automation strategies that make your Python scripts bulletproof in production Linux systems.

If you’re a developer or system administrator aiming to leverage Linux’s power for automation, truly mastering how to run and manage Python scripts efficiently can transform your workflow and boost reliability.

Let’s dive deeper into running Python scripts on Linux beyond the basics, covering practical tips and best practices with examples.


1. Setting Up a Robust Environment for Your Python Scripts

Running a Python script on Linux might seem as simple as typing:

python3 my_script.py

But relying solely on this method can cause headaches when your system uses multiple Python versions or when dependencies vary.

Use Virtual Environments

A virtual environment isolates your project dependencies, preventing conflicts with other projects or system packages.

To create and activate a virtual environment:

python3 -m venv venv
source venv/bin/activate

Then install required packages:

pip install -r requirements.txt

Running your script inside this environment ensures consistent dependencies:

python my_script.py

Tip: Add the venv/bin path at the start of your automation scripts or cron jobs to avoid ambiguity.

Shebang Line For Direct Execution

Instead of running python3 my_script.py, add a shebang line at the top of your script:

#!/usr/bin/env python3

print("Hello from Python script!")

Make it executable:

chmod +x my_script.py

Now you can run it directly:

./my_script.py

This method is cleaner for automation and lets you specify which python version to run.


2. Handle File Permissions Correctly

On Linux, file permissions determine if your script can be executed.

  • Ensure the file is executable (chmod +x my_script.py)
  • Be mindful of ownership if running under different users (e.g., via cron or systemd)
  • Use ls -l to verify:
-rwxr-xr-x 1 user user 1234 Jun 10 14:30 my_script.py

Also remember that if your script creates or modifies files, their permissions should be properly handled inside your script for smooth operation.


3. Executing Scripts as Background Jobs: nohup & screen

You may want to keep scripts running in the background even after logging out.

  • nohup (no hang-up) lets processes continue after session ends:
nohup ./my_script.py > output.log 2>&1 &
  • screen or tmux allow interactive sessions detached from terminal:

Start screen session:

screen -S myscript
./my_script.py
# Press Ctrl-A then D to detach.
# Reattach later using:
screen -r myscript

These tools come handy during long-running Python scripts or servers.


4. Automate Execution with Cron Jobs

Periodic tasks are a core part of automation. Cron is the de facto scheduler in Linux.

Edit the crontab using:

crontab -e

Example: Run the script every day at midnight,

0 0 * * * /home/user/venv/bin/python /home/user/scripts/my_script.py >> /home/user/logs/myscript.log 2>&1

Pro Tips:

  • Always use absolute paths for scripts and executables.
  • Redirect stdout/stderr for debugging.
  • Activate virtual env inside a wrapper shell script if needed before calling python.

Example wrapper script (run_my_script.sh):

#!/bin/bash

source /home/user/venv/bin/activate
python /home/user/scripts/my_script.py >> /home/user/logs/myscript.log 2>&1 

Make wrapper executable and call it from cron:

0 0 * * * /home/user/run_my_script.sh 

5. Using systemd for Reliable Script Daemons

For critical services that must start on boot and restart automatically on failure, systemd is superior to cron or manual launching.

Create a service unit file /etc/systemd/system/myscript.service:

[Unit]
Description=My Python Script Service
After=network.target

[Service]
User=user
WorkingDirectory=/home/user/scripts/
ExecStart=/home/user/venv/bin/python /home/user/scripts/my_script.py
Restart=always

[Install]
WantedBy=multi-user.target

Then enable and start it:

sudo systemctl daemon-reload
sudo systemctl enable myscript.service 
sudo systemctl start myscript.service 

Check status/logs anytime:

sudo systemctl status myscript.service  
journalctl -u myscript.service  

This setup ensures your Python automation runs consistently like any other system service.


Summary Checklist for Mastery

  • ✅ Use virtual environments to manage dependencies reliably.
  • ✅ Add shebang lines & make scripts executable for cleaner invocation.
  • ✅ Set correct permissions & ownership on scripts/files.
  • ✅ Run long jobs with nohup/screen/tmux to keep them alive after logout.
  • ✅ Schedule periodic tasks properly through cron with absolute paths & logs.
  • ✅ Use systemd services for persistent, restartable daemons.
  • ✅ Always test commands manually before automating them.

Mastering these techniques goes far beyond simply typing python script.py. This approach crafts bulletproof Python automation tailored for Linux production environments — increasing uptime, maintainability, and developer confidence!


Feel free to comment below if you'd like me to cover debugging tricky environment issues, dockerizing Python automations, or advanced scheduling with Anacron/Celery in future posts!