I want to run a custom script when my Raspberry Pi running Arch Linux starts up. I only need the most basic instructions.
- You're comfortable running commands in the console
- You know what to do if you accidentally brick your RPi
- You know how to write shell scripts
- You're already familiar with basic linux shell commands
These instructions were written as a reminder to myself for a fresh install of Arch Linux (2013-07-22 version) in order to run custom startup scripts. Please read through the instructions and make sure you understand all the steps first before attempting this. Results may vary, but because you're doing things as root, you might brick your RPi if you do something wrong (or if things change in different versions of Arch Linux). Follow at your own risk.
Feel free to let me know of any typos in the comments and I'll fix them right away. Best of luck!
Note that this is only one solution out of many possible ones. It may not even be the accepted correct practice, but it happened to work after lots of Googling. You can modify the instructions if you feel comfortable doing so. Also note that these instructions were written as a reminder for myself in case I need to do this again, so they may be a bit brief. This solution was tested to work with the archlinux-hf-2013-07-22.img.zip image from the Raspberry Pi downloads page. Your results may vary with other versions (including this not working at all).
- startup script is located at: /scripts/my_startup_script.sh
- script already has executable privileges for root
- we want to run our script in multi-user runlevel (if this doesn't make sense, see here for details)
Step 1: create the startup service file for systemd
In this example we're making a file called "myauto.service". In practise you can name it whatever you want, so long as it doesn't replicate another service's name.
# nano /etc/systemd/system/myauto.service
Step 2: edit the .service file to contain the information needed to both run and install your service
In this example, we've included some bare-basics only which points to our startup script /scripts/my_startup_script.sh:
[Unit] Description=Autostart custom script [Install] WantedBy=multi-user.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/scripts/my_startup_script.sh
Once you've edited this above file as you'd like, save it.
This file says that we want to make a service referred to as myauto.service, which should be installed at the runlevel of multi-user, that runs a one-shot command which is our startup script.
Step 3: install the service
Here we get systemctl to install the service. Remember to replace "myauto" with the name of your .service file created earlier.
# systemctl enable myauto.service
You'll see a symbolic link created in /etc/systemd/system/multi-user.target.wants that corresponds to the .service file created earlier (in this case myauto.service).
Step 4: check if service is running (after restart)
You can check if the service is running by the following command (substituting your service's name for myauto.service below):
# systemctl is-enabled myauto.service
Step 5: where do I get more information?
Check out the very helpful systemd documentation at https://wiki.archlinux.org/index.php/Systemd