"Service {FOO} start" vs "/etc/init.d/{FOO} start"?

J'utilise CrashPlan sur mon bureau Debian 8. J'ai un script où je dois arrêter le service CrashPlan au début puis le démarrer avant de sortir. J'utilisais

/etc/init.d/crashplan start 

pour le redémarrage mais le nouveau process CrashPlan était sorti à la fin de mon script. Je suis passé à

 service crashplan start 

et tout va bien!

Bizarrement, sous Ubuntu 16.04 sur une autre boite, le script / command init.d se comporte comme vous le souhaitez. Lorsque mon script se ferme, CrashPlan continue à s'exécuter. Welp, maintenant Ubuntu me donne les mêmes problèmes.

Mon script Debian est maintenant fonctionnel. Mais j'avais l'printing que la command de service était en voie d'être dépréciée, alors je suis insortinggué par les différences entre init.d et le service , et entre les versions actuelles de Debian et Ubuntu.

Sur n'importe quel système utilisant systemd, l'exécution directe d'un script init.d ne sera pas la meilleure façon de démarrer un service, car elle contournera tous les parameters et la tenue de livres habituellement effectuée par systemd lui-même. En outre, vous ne disposez peut-être même pas d'un script d'initialisation, le service peut être décrit uniquement dans un file d'unité.

Avec sysvinit "old-style" il n'y avait pas beaucoup de comptabilité à faire: démarrer un service était à peu près la même que de simplement exécuter un script. Cela ne signifie pas que c'était une bonne idée pour le script d'initialisation directement, la description dans la page de manuel de service vous explique pourquoi:

service exécute un script d'initialisation System V ou un job upstart dans un environnement aussi prévisible que possible, en supprimant la plupart des variables d'environnement et en définissant le directory de travail actuel sur /.

Un shell random n'est pas un environnement très prévisible, vous pourriez par exemple avoir des limites de files ou de process actives.

En ce qui concerne la dépréciation, peut-être que vous devriez utiliser systemctl , mais sur le service Debian essaie réellement de faire la bonne chose et exécute systemctl pour vous. (Disons simplement que si le service est obsolète, l'exécution directe d'un script d'initialisation l'est encore plus.)

(Je ne suis pas assez expert en systemd pour vous dire ce qui tue exactement le service si vous exécutez directement le script init, cela dépend aussi du script que vous exécutez: de cron, de la command line, de quelque chose d'autre. ..)