How do I stop a program running at startup in Linux. I want to remove some apps from startup to allow them to be managed by
supervisord e.g apache2
If you are dealing with a modern Ubuntu system and a few other distros you may have to deal with a combination of traditional init scripts and upstart scripts. Managing init scripts is covered by other answers. The following is one way to stop an upstart service from starting on boot:
# mv /etc/init/servicename.conf /etc/init/servicename.conf.disabled
The problem with this method is that it does not allow you to start the service using:
# service start servicename
An alternative to this is to open the
servicename.conf file in your favorite editor and comment out any lines that start with:
That is, change this to
#start on ...
where the "..." is whatever was after "start on" previously. This way, when you want to re-enable it, you don't have to remember what the "start on" parameters were.
Finally, if you have a new version of upstart you can simply add the word "manual" to the end of the configuration file. You can do this directly from the shell:
# echo "manual" >> /etc/init/servicename.conf
This will cause upstart to ignore any "start on" phrases earlier in the file.
Slackware and Arch linux have similar methods of stopping/starting processes at boot, different than the Ubuntu and Redhat-style examples given above.
In both Slackware and Arch linuxes, sh scripts exist in directory
/etc/rc.d, typically one script per daemon, or one script per subsystem.
For example, Slackware starts the Apache web server with a script
/etc/rc.d/rc.httpd, called at the appropriate time during system startup with an argument of "start". Arch linux has differently-named scripts, but the same sort of thing goes on.
To keep some process from starting during system boot, on Slackware, you just make the appropriate script in /etc/rc.d not executable. To keep Apache from starting at the next boot:
chmod -x /etc/rc.d/rc.httpd
To stop an Apache that got started at boot:
/etc/rc.d/rc.httpd stop You'll need to be root.
Arch is a bit more complex. The file /etc/rc.conf, a shell script, has an array DAEMONS. To keep Apache from starting at boot, you'd change this line in /etc/rc.conf:
DAEMONS=(hal syslog-ng network netfs crond alsa sshd httpd ntpd postgresql)
To this line:
DAEMONS=(hal syslog-ng network netfs crond alsa sshd ntpd postgresql)
To stop an already executing apache, you'd execute
/etc/rc.d/httpd stop as root.