Directory in /var/run gets deleted after hard reboot

I keep my sphinx pid in /var/run/sphinx/searchd.pid but every time I hard reboot the directory /var/run/sphinx disappears and sphinx fails to start. Is there a way to make that directory stick or have it automatically created? How do people usually handle this situation? I use Ubuntu Hardy


That directory is ephemeral by design. If its contents stuck around across boots, all sorts of ugly effects could occur, as control scripts of various sorts look in there to see what processes they should be signaling. On recent system, this temporary nature is enforced by mounting /var/run as tmpfs, while older systems just deleted everything in the directory at startup.

Therefore, you need to configure Sphinx or its startup script to create that directory, or just write the PID file in /var/run directly.


You have two chances at least:

  • change your init script to do a mkdir -p /var/run/sphinx/

or

  • set pid_file = /var/run/sphinx-searchd.pid in /etc/sphinx.conf

I'm for the second one.


there is now a centralized mechanism for the creation of temporary files and directories such as these. A service wishing to use this method can remove mkdir commands in its own startup script and instead place a .conf file in /etc/tmpfiles.d, /run/tmpfiles.d, or /usr/lib/tmpfiles.d, with Ubuntu services seeming to prefer the last option. for your case create a file /usr/lib/tmpfiles.d/sphinx.conf.
the content of the file would be:
d /var/run/sphinx 0755 root root

here d stands for directory, next to it is the path, permission, owner and group.
This will create the /var/run/sphnix directory on reboot.

Checkout the full documentation tmpfiles.d