Eu acho que você já respondeu sua própria pergunta.
Se você quiser separar um daemon e desejar que o systemctl retorne o código de status, Type=forking
é o caminho a ser seguido.
Há Type=oneshot
também. Você deve usar isto somente quando você espera que seu script / programa saia, ao invés de executar como daemon. O systemctl, na verdade, aguarda o término do programa ExecStart=
.
Da minha máquina CentOS 7.1:
[unixguy@infra01 system]$ pwd
/usr/lib/systemd/system
[unixguy@infra01 system]$ find ./ -type f | xargs grep 'Type=' | awk -F: '{print $2}' | sort | uniq -c | sort -nr | head -5
64 Type=oneshot
37 Type=forking
11 Type=notify
6 Type=idle
6 Type=dbus
[unixguy@infra01 system]$ find ./ -type f | xargs grep 'Type=forking' | awk -F: '{print $1}' | head
./rc-local.service
./rdisc.service
./tcsd.service
./plymouth-kexec.service
./plymouth-halt.service
./plymouth-poweroff.service
./plymouth-reboot.service
./plymouth-start.service
./rpc-statd.service
./systemd-cfengine-bootstrap.service
[unixguy@infra01 system]$ find ./ -type f | xargs grep 'Type=oneshot' | awk -F: '{print $1}' | head
./systemd-kexec.service
./quotaon.service
./halt-local.service
./initrd-cleanup.service
./initrd-parse-etc.service
./initrd-switch-root.service
./initrd-udevadm-cleanup-db.service
./kmod-static-nodes.service
./systemd-binfmt.service
./[email protected]
Como você pode ver, os serviços de daemon estão usando Type=forking
e serviços / scripts de execução únicos estão usando Type=oneshot