Eu continuaria usando os scripts pré / pós-inst,
preinst - This script executes before that package will be unpacked from its Debian archive (".deb") file. Many 'preinst' scripts stop services for packages which are being upgraded until their installation or upgrade is completed (following the successful execution of the 'postinst' script).
postinst - This script typically completes any required configuration of the package foo once foo has been unpacked from its Debian archive (".deb") file. Often, 'postinst' scripts ask the user for input, and/or warn the user that if he accepts default values, he should remember to go back and re-configure that package as the situation warrants. Many 'postinst' scripts then execute any commands necessary to start or restart a service once a new package has been installed or upgraded.
veja - link
A sintaxe de invocação start | stop | restart é escrita como condicional, veja link seção 9.3.3.2 Executando initscripts
if which invoke-rc.d >/dev/null 2>&1; then
invoke-rc.d package
else
/etc/init.d/package
fi
então ...
if which service >/dev/null 2>&1; then
service package <action>
elif which invoke-rc.d >/dev/null 2>&1; then
invoke-rc.d package <action>
else
/etc/init.d/package <action>
fi
e adicione outro condicional para o systemd quando necessário;)
Então, sim, a maneira correta de iniciar | stop | restart um serviço é com o script wrapper apropriado (invoke-rc.d / system), quando possível, em vez de chamar o script init (/etc/init.d/ pacote) e voltar ao script /etc/init.d quando nenhum wrapper estiver disponível.