It is because the sphinx script is forking. In other words, the process that is running after is not the process that kicked it off. Change the type to forking and give it the PIDFile pointing to the sphinx pid file. Should work from there…
It won’t restart without knowing which process stopped.
See the below from the link above:
PIDFile=
Takes an absolute path referring to the PID file of the service. Usage of this option is recommended for services where Type= is set to forking . The service manager will read the PID of the main process of the service from this file after start-up of the service. The service manager will not write to the file configured here, although it will remove the file after the service has shut down if it still exists. The PID file does not need to be owned by a privileged user, but if it is owned by an unprivileged user additional safety restrictions are enforced: the file may not be a symlink to a file owned by a different user (neither directly nor indirectly), and the PID file must refer to a process already belonging to the service.
It will start, but if you kill the process (kill not stop the service) does it restart automatically? If so, great. My guess is that it might not always do that because it does not know the process to watch. That said, I am by no means an expert in systemd.