📖 Scenario: You are a system administrator who wants to monitor if important services on your server are running. You will write a simple script that checks the status of these services and reports if they are active or not.
🎯 Goal: Build a bash script that checks the health of three services: nginx, mysql, and ssh. The script will print if each service is running or stopped.
📋 What You'll Learn
Create a list of service names in a variable
Create a variable to hold the command used to check service status
Use a loop to check each service status using the command
Print the service name and its status (running or stopped)
💡 Why This Matters
🌍 Real World
System administrators often need to monitor if critical services are running to keep servers healthy and avoid downtime.
💼 Career
Knowing how to write simple health check scripts is a basic skill for IT support, DevOps, and system administration roles.
Progress0 / 4 steps
1
Create a list of services to check
Create a variable called services that holds the names of these services exactly: nginx, mysql, and ssh separated by spaces.
Bash Scripting
Hint
Use double quotes and separate service names with spaces inside the quotes.
2
Set the command to check service status
Create a variable called check_cmd and set it to the exact string systemctl is-active which will be used to check if a service is running.
Bash Scripting
Hint
Assign the string exactly as shown to the variable check_cmd.
3
Check each service status using a loop
Use a for loop with variable service to iterate over $services. Inside the loop, run the command stored in $check_cmd with the current $service and store the output in a variable called status.
Bash Scripting
Hint
Use command substitution with $( ) to run the command and save output.
4
Print the service name and its status
Inside the for loop, add a printf statement to print the service name and its status in this exact format: Service nginx is running or Service mysql is stopped. If status equals active, print 'running', otherwise print 'stopped'.
Bash Scripting
Hint
Use an if statement to compare status with active. Use printf to format the output.
Practice
(1/5)
1. What is the main purpose of a service health check script in bash?
easy
A. To install new software packages
B. To check if a service is running or stopped
C. To delete files from the system
D. To create new user accounts
Solution
Step 1: Understand the script's goal
A service health check script is designed to verify the status of a service, whether it is running or stopped.
Step 2: Compare options with the goal
Only To check if a service is running or stopped matches the purpose of checking service status; others are unrelated tasks.
Final Answer:
To check if a service is running or stopped -> Option B
Quick Check:
Service health check = check running status [OK]
Hint: Focus on what 'health check' means for a service [OK]
Common Mistakes:
Confusing service check with installation
Thinking it manages users
Assuming it deletes files
2. Which of the following is the correct syntax to check the status of a service named nginx using systemctl in bash?
easy
A. systemctl status nginx
B. systemctl check nginx
C. service nginx status
D. systemctl run nginx
Solution
Step 1: Recall systemctl command syntax
The correct command to check status is systemctl status servicename.
Step 2: Match options with correct syntax
systemctl status nginx matches the correct syntax. systemctl check nginx uses a wrong verb 'check'. service nginx status uses 'service' command which is older but not systemctl. systemctl run nginx uses 'run' which is invalid here.
Final Answer:
systemctl status nginx -> Option A
Quick Check:
systemctl status = check service [OK]
Hint: Remember: systemctl status + service name checks status [OK]
Common Mistakes:
Using 'check' instead of 'status'
Confusing 'service' and 'systemctl'
Using 'run' instead of 'status'
3. What will be the output of this script snippet if the ssh service is running?
if systemctl is-active --quiet ssh; then
echo "SSH service is running"
else
echo "SSH service is stopped"
fi
medium
A. No output
B. SSH service is stopped
C. Syntax error
D. SSH service is running
Solution
Step 1: Understand systemctl is-active --quiet
This command returns success (exit code 0) if the service is active (running), otherwise failure.
Step 2: Follow the if-else logic
If the service is running, the then branch echoes "SSH service is running"; else branch echoes stopped.
Final Answer:
SSH service is running -> Option D
Quick Check:
is-active true = running message [OK]
Hint: is-active --quiet returns success if running [OK]
Common Mistakes:
Assuming output is from systemctl status
Confusing exit codes with output text
Missing the echo command effect
4. Identify the error in this health check script snippet:
if systemctl status apache2; then
echo "Apache2 is running"
else
echo "Apache2 is stopped"
fi
medium
A. Missing --quiet option causes wrong output
B. The if statement syntax is incorrect
C. systemctl status returns output but not exit code for running check
D. echo commands are missing quotes
Solution
Step 1: Check systemctl status behavior
systemctl status outputs verbose service information to stdout every time it is called, which pollutes the output of the health check script with extra details before the echo. Although it returns exit code 0 if active and non-zero (e.g., 3) if stopped, the verbose output makes it unsuitable for clean scripting.
Step 2: Understand correct command for status check
Use systemctl is-active --quiet to get proper exit code check without any output.
Final Answer:
systemctl status returns output but not exit code for running check -> Option C
Quick Check:
Use is-active for exit code check [OK]
Hint: Use is-active --quiet for exit code, not status [OK]
Common Mistakes:
Assuming systemctl status exit code indicates running
Syntax errors in if statement
Forgetting quotes in echo
5. You want to write a bash script that checks multiple services: nginx, mysql, and redis. Which script snippet correctly loops over these services and prints their status using systemctl is-active --quiet?
hard
A. for service in nginx mysql redis; do
if systemctl is-active --quiet $service; then
echo "$service is running"
else
echo "$service is stopped"
fi
done
B. for service in [nginx, mysql, redis]; do
if systemctl status $service; then
echo "$service is running"
else
echo "$service is stopped"
fi
done
C. for service in nginx mysql redis
do
systemctl is-active $service
echo "$service status checked"
done
D. services=(nginx mysql redis)
for service in ${services[@]}; do
if systemctl is-active --quiet $service; then
echo "$service is running"
else
echo "$service is stopped"
fi
done
Solution
Step 1: Check loop syntax and service list
for service in nginx mysql redis; do
if systemctl is-active --quiet $service; then
echo "$service is running"
else
echo "$service is stopped"
fi
done uses correct bash for loop syntax with space-separated service names. for service in [nginx, mysql, redis]; do
if systemctl status $service; then
echo "$service is running"
else
echo "$service is stopped"
fi
done uses invalid list syntax with brackets. for service in nginx mysql redis
do
systemctl is-active $service
echo "$service status checked"
done misses if condition and uses wrong output. services=(nginx mysql redis)
for service in ${services[@]}; do
if systemctl is-active --quiet $service; then
echo "$service is running"
else
echo "$service is stopped"
fi
done uses correct array and loop syntax without $ in variable declaration.
Step 2: Verify status check command usage
for service in nginx mysql redis; do
if systemctl is-active --quiet $service; then
echo "$service is running"
else
echo "$service is stopped"
fi
done uses systemctl is-active --quiet correctly to check service status and prints appropriate message.
Final Answer:
for service in nginx mysql redis; do
if systemctl is-active --quiet $service; then
echo "$service is running"
else
echo "$service is stopped"
fi
done -> Option A
Quick Check:
Correct loop + is-active --quiet = for service in nginx mysql redis; do
if systemctl is-active --quiet $service; then
echo "$service is running"
else
echo "$service is stopped"
fi
done [OK]
Hint: Use for service in list; do ... done with is-active --quiet [OK]
Common Mistakes:
Using brackets [] for list in for loop
Adding $ in for variable declaration
Not using is-active --quiet for status check
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.