In Gentoo Linux, one of the most powerful and flexible distributions, there is an important tool called the init system. This is the first process that runs when you boot your system, and it controls the startup of other processes. In Gentoo Linux, as with other UNIX-like systems, the init system used is OpenRC. It uses scripts called init scripts to manage the services.
However, there are times when you need to add your own startup and shutdown scripts to perform specific tasks. This could be anything from starting a particular application, loading modules, or even performing cleanup tasks before shutting down your system.
This guide will show you how to create and manage your own startup and shutdown scripts in Gentoo Linux.
Step 1: Understanding the Init System
Before we delve into creating your own scripts, it’s important to understand how the init system works. In Gentoo Linux, the init system uses runlevels, which are essentially modes of operation. The two most important runlevels for us are:
- default: This is the runlevel that your system enters when it finishes booting. All the services that should be running on a fully operational system are started in this runlevel.
- shutdown: This is the runlevel that your system enters when it’s about to shut down.
The init scripts that control what happens in these runlevels are located in /etc/init.d/. Each script corresponds to a service, and running that script with the start argument starts that service, while running it with the stop argument stops the service.
Step 2: Creating a Startup Script
To create a startup script, you first need to create a new file in the /etc/init.d/ directory. The file should have the same name as the service you want to control. For example, if you’re creating a script to start a service called myservice, you could create a new file with:
sudo nano /etc/init.d/myservice
This opens the new file in the nano editor. Here’s an example of how the script might look:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | #!/sbin/openrc-run depend() { after modules } start() { ebegin "Starting myservice" start-stop-daemon --start --exec /usr/bin/myservice eend $? } stop() { ebegin "Stopping myservice" start-stop-daemon --stop --exec /usr/bin/myservice eend $? } |
This script first defines the dependencies of the service. In this case, it should start after the modules service. The `start` and `stop` functions define what should happen when the service is started and stopped, respectively.
Don’t forget to make your script executable:
sudo chmod +x /etc/init.d/myservice
Step 3: Adding the Service to the Default Runlevel
To ensure that your service starts when the system boots, you need to add it to the default runlevel:
sudo rc-update add myservice default
Your service will now start when your system boots.
Step 4: Creating a Shutdown Script
Creating a shutdown script is similar to creating a startup script. The only difference is the runlevel to which you add the service.
Let’s say you’re creating a service called mycleanup:
sudo nano /etc/init.d/mycleanup
Here’s an example of how the script might look:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/sbin/openrc-run depend() { before * } start() { : } stop() { ebegin "Running cleanup" /usr/bin/mycleanup eend $? } |
This script will execute the `mycleanup` command just before the system shuts down. Note the before `*` in the depend function and the empty start function.
Make the script executable:
sudo chmod +x /etc/init.d/mycleanup
Step 5: Adding the Service to the Shutdown Runlevel
To ensure that your service is executed when the system is shutting down, add it to the shutdown runlevel:
sudo rc-update add mycleanup shutdown
Your cleanup script will now run every time your system shuts down.
Conclusion
Managing startup and shutdown scripts in Gentoo Linux gives you the power to control exactly what your system does when it starts and stops. This guide provided a brief introduction to creating and managing your own scripts. However, the OpenRC init system is a powerful tool with many more features, and we encourage you to explore it further.
1 Comment
Thanks, You saved my time