Quindi un punto dei lavori iniziali è quello di essere semplici da scrivere.
C'è molta magia nella shell script negli script init.d che viene ripetuta più volte. Dichiarazioni di caso, tracciamento pidfile, righe di commento lsb. Non è molto chiaro come scrivere un BUON script init.d senza averne letto uno.
Se hai già avuto il problema di scrivere tutto ciò, allora non hai bisogno di un lavoro iniziale a meno che, come ho già detto in un altro commento, dipenda da un altro lavoro / evento iniziale.
Ma davvero, upstart rende le cose davvero semplici. Non dovresti aver bisogno di un pre-avvio a meno che non sia necessario impostare cose come tmpdirs, ulimits o argomenti di runtime. Non dovresti aver bisogno di un post-stop se non vuoi assicurarti di riordinare dopo un servizio (il servizio dovrebbe davvero ripulire dopo se stesso all'uscita normale).
Spesso uno script init.d gigante con molte opzioni si riduce a un lavoro iniziale di 10-15 righe. Gli script init.d più complessi possono avere la maggior parte della loro logica scaricata in pre-avvio. La chiave è che è solo un piccolo frammento di codice per configurare l'ambiente per il processo, e non la logica sulla gestione di start / stop / respawn / etc.
La parte più difficile, e quella in cui le persone si sbagliano più spesso, è sapere quando iniziare / interrompere il loro lavoro. start on runlevel [2345]sembra logico, ma ignora il fatto che la rete si sta sviluppando in parallelo in quel punto, così come i montaggi di filesystem locali. La chiave è cercare di capire esattamente le cose minime necessarie (altri servizi, filesystem, rete, ecc.) Per iniziare a funzionare e iniziare al termine. La maggior parte dei servizi di rete tradizionali dovrebbe fare start on (local-filesystems and net-device-up IFACE!=lo).