Mastering Exit Codes for Robust Automation
In this lesson, you will learn how to move beyond basic success/failure signals by using custom exit codes to communicate the specific "health" of your scripts to parent processes.
When you run a script, it usually returns 0 (success) or 1 (general error). While this works for simple tasks, it is insufficient for complex automation where a parent process needs to know why a script failed so it can decide how to recover. By implementing an Advanced Exit Code Strategy, you turn your script into a self-documenting service.
Defining Your Own Protocol
Think of exit codes as a status reporting system. Instead of generic errors, define a range of meaningful codes (between 1 and 255). For example, if your script monitors a database:
0: Everything is fine.10: Configuration file is missing.20: Database connection refused.30: Disk space critically low.
When a parent process calls your script, it can now use logic to determine the next steps:
#!/bin/bash
# A simple check for a config file
if [ ! -f "/etc/myapp.conf" ]; then
exit 10
fi
# Simulate a process
./run_service
exit_status=$?
if [ $exit_status -eq 0 ]; then
echo "Service running."
elif [ $exit_status -eq 20 ]; then
echo "Alert: Connection failed. Retrying in 5 minutes..."
fi
Why This Matters
If your script only returns 1 for every failure, the parent process is "blind"—it doesn't know if it should retry the connection, alert a human, or stop the entire workflow. By assigning specific codes to specific failure states, you enable the parent process to act intelligently.
Keep in mind that exit codes 126 and 127 are reserved by the shell (for permission issues and "command not found," respectively), so it is best to stick to the 1-125 range for your custom application logic. This practice ensures your scripts behave like professional system tools, making your complex lifecycles much easier to orchestrate.
Key Takeaway: Use specific exit codes (1-125) to act as a diagnostic signaling system, allowing parent processes to make informed decisions based on why your script failed.