For me, I run "killall nginx" and start it by "sbin/nginx", anyone has a better restart script?

BTW: I install nginx from source, i do not find 'service nginx' command or /etc/init.d/nginx

  • 1
    Why are you installing from source? Nginx packages are available for most good Server linux distributions. Or you could roll your own packages, but not using packages is a bugger for maintainability. – Tom O'Connor Dec 16 '10 at 9:56
  • because of mod_rails – larry Dec 16 '10 at 12:41

The nginx package supplies a /etc/init.d/nginx script that provides the usual start|stop|restart|reload ... functionality.

/etc/init.d/nginx restart

will restart nginx

as will

service nginx restart


Here is a link to a script you can use as /etc/init.d/nginx.

  • 2
    Depends on your repository. The Nginx source does not provide init scripts so if you like being updated and compile from source you will have to get one from the wiki. – Martin Fjordvald Dec 16 '10 at 8:31
  • 1
    I must have more coffee before answering questions ... – user9517 Dec 16 '10 at 8:42
  • what does service nginx restart point to and is it appropriate to reload something when a change is made to init.d/nginx ? My two commands (/etc/init.d/nginx and service nginx) seem out of sync. – Danny Apr 13 '13 at 22:22
  • @Danny: dunno I wrote this >2 years ago. – user9517 Apr 13 '13 at 22:33


inside the links there are some command for start and stop nginx server

for starting nginx:


for stoping nginx:

/usr/bin/nginx -s stop

/usr/bin depends on where you install your nginx


For some reason, on the embedded system I am working on it is:

systemctl restart nginx
  • 1
    This question and most of the answers are eight years old and obsolete. That is "some reason". This is the correct way to do it on current Linux operating systems. – Michael Hampton Jan 23 '19 at 15:50
  • Ok, so maybe it is not just true for embedded systems then – cardamom Jan 23 '19 at 15:51

After editing the configuration files, I restart it like this on OpenBSD:

kill -HUP `cat /var/run/nginx.pid` && date && sleep 1 && \
    tail -2 /var/www/logs/error.log ; date

The HUP signal makes it re-read its configuration files, the tail shows whether any errors have been encountered, the date puts those errors into the context (an error has occurred only if the time from date matches the time from the log), and sleep 1 ensures that there are no race conditions between reading from the log prior to nginx having had a time to write to it.

This is how it looks:

Cns# kill -HUP `cat /var/run/nginx.pid` && date && sleep 1 && tail -2 /var/www/logs/error.log ; date
Tue Feb 12 10:58:52 PST 2013
2013/02/12 10:03:35 [emerg] 8120#0: directive "set" is not terminated by ";" in /etc/nginx/conf.d/etc.ngx.grok/bxr.su.conf:226
2013/02/12 10:04:19 [emerg] 8120#0: invalid return code "$uri_def" in /etc/nginx/conf.d/etc.ngx.grok/bxr.su.conf:231
Tue Feb 12 10:58:53 PST 2013

The fact that the time from the log is not between times printed by date indicates that no errors have been encountered this time around, and the new configuration is a good one.


You can find init scripts in the NginX Wiki: http://wiki.nginx.org/Configuration#Init_Scripts

The restart function runs the following command:

$BASEDIR/sbin/nginx -s stop
$BASEDIR/sbin/nginx $BASEDIR/conf/nginx.conf

If you've nginx installed in /opt/nginx, replace BASEDIR= by BASEDIR=/opt/nginx.


Usually, packages installed from source don't install startup script at /etc/init.d/. You have two options.

1- You can look for a script in the source code directory or on the website, and customise it if needed.

2- You can copy a startup script for another package from your system and customise it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.