Hai bisogno di aiuto per convertire gli script di servizio init.d a systemd (CentOS)

Ho trascorso diversi giorni su un tema che è incredibilmente frustrante e sono direttamente fuori delle opzioni.

Attualmente sto usando un server CentOS 6.8 al lavoro per il nostro sito web. CentOS 6 (Enterprise Linux 6 o EL6) utilizza il vecchio init.d model per gli script di avvio. C'è un programma che il mio capo richiede di utilizzare, l'agente CDP di SonicWALL. Ha un server di backup SonicWALL e il suo software "agente" viene eseguito in background per eseguire il backup di file e cartelle specifiche al server. Realmente è costruito su Acronis TrueImage, ma è un'altra storia.

  • C'è un modo per vedere l'tree di esecuzione di systemd?
  • CentOS - salta "Controllo del file system root"
  • Ottenere lo script di shell per eseguire come demone su CentOS?
  • Problemi di installazione di pdftk su CentOS7 - problemi di libgcj
  • path di esportzione / etc / environment
  • Come posso get il pacchetto meta-git-tutto su RHEL 6.2
  • Il problema più grande è che il loro agente CDP utilizza Adobe AIR. Devono essere progettati in questo modo per essere cross-platform (come hanno un installatore per Windows / OSX / Linux), ma naturalmente Adobe ha interrotto completamente l'AIR su Linux a 64 bit qualche tempo fa. Il loro sito fornisce alcuni passi per ottenerlo installato, ma che risale a Red Hat 5.5, nemless 6.

    Ho potuto get AIR per installare su EL7 seguendo i passaggi per EL6, e solo notare where i nomi dei pacchetti erano cambiati nel repos. Interessante notare che il normale programma di installazione dell'interface grafica (AdobeAIRInstaller.bin) non funziona e fornisce un errore circa "forse il tuo amministratore vieta l'installazione" anche quando si esegue come root), ma i file .rpm funzionano.

    Ho le più attuali:
    adobeair-core-2.6.0-19170.noarch.rpm
    adobeair-2.6.0-19170.i686.rpm

    In combinazione con le librerie GTK2 i686, questo funziona effettivamente.

    Tuttavia, l'agente CDP è più complicato di questo. Ci sono due servizi di sistema che devono essere eseguiti in modo che il software dell'agente funzioni effettivamente (e se ne pensi, questo sarà necessario per garantire che i backup automatici funzionino comunque.)

    Il loro installatore, però, è di anni e mette gli script di avvio in init.d. Questo è "supposto" per lavorare in EL7, ma non lo fa. Ho passato ore a giocare con questo e semplicemente non funziona.

    Quindi, fondamentalmente, ci sono due binari che devono essere eseguiti. I comandi per avviarli sono:

    /sbin/cdp/cdpagentproxy /sbin/cdp/cdpdaemon start 

    Se apro un terminal e le esegui manualmente, funzionano – e posso aprire l'agente CDP e funziona. Tuttavia, non si avvia all'avvio a causa dell'incompatibilità di init.d / systemd.

    Così ho fatto un paio di semplici "servizi" e li ho posti nei punti giusti. Il file cdpdaemon.service, ad esempio:

     [Unit] Description=CDP Daemon Service After=syslog.target network.target [Service] Type=forking ExecStart=/sbin/cdp/cdpdaemon start [Install] WantedBy=multi-user.target 

    Ho inserito questo in /usr/lib/systemd/system/cdpdaemon.service e ho fatto un symlink in esso /etc/systemd/system/multi-user.target.wants/cdpdaemon.service .

    Ma ecco cosa succede quando cerco di controllare lo stato:

     [root@localhost Desktop]# systemctl status cdpdaemon.service ● cdpdaemon.service - CDP Daemon Service Loaded: loaded (/usr/lib/systemd/system/cdpdaemon.service; enabled; vendor preset: disabled) Active: failed (Result: exit-code) since Sun 2016-08-21 22:08:13 EDT; 10s ago Process: 1596 ExecStart=/sbin/cdp/cdpdaemon start (code=exited, status=0/SUCCESS) Main PID: 1633 (code=exited, status=127) Aug 21 22:08:13 localhost.localdomain systemd[1]: Starting CDP Daemon Service... Aug 21 22:08:13 localhost.localdomain cdpdaemon[1596]: Starting process. Aug 21 22:08:13 localhost.localdomain systemd[1]: Started CDP Daemon Service. Aug 21 22:08:13 localhost.localdomain systemd[1]: cdpdaemon.service: main process exited, code=exited, status=127/n/a Aug 21 22:08:13 localhost.localdomain systemd[1]: Unit cdpdaemon.service entered failed state. Aug 21 22:08:13 localhost.localdomain systemd[1]: cdpdaemon.service failed. 

    L'altra fa la stessa cosa. Sembra che tenta di eseguire, ma poi si ferma e segnalerà un errore. Se apro un terminal e digiti il ​​tipo /sbin/cdp/cdpdaemon start , funziona perfettamente bene.

    Sto facendo qualcosa di sbagliato qui? Non capisco i diversi tipi di opzioni "target" né il "dopo" e il tipo. (Fondamentalmente ho preso un servizio di lavoro, ho copiato il text e ho cambiato il command)

    Suppongo che un'altra opzione sarebbe quella di fare un cronjob che funziona a un certo tempo (diciamo le 11.00, se i backup eseguono a mezzanotte) che esegue i due comandi, ma sembra che il modo sbagliato è quello di farlo.

    Il programma funziona, non posso farlo funzionare da solo senza di me avviare i due processi di aiuto.

    Modifica: Ho pensato di fornire il file .sh di installazione nel caso in cui lo aiuti. Potete vedere where controlla la distro che stai eseguendo e crea gli script init.d.

    http://pastebin.com/FmrZcmcR

    2 Solutions collect form web for “Hai bisogno di aiuto per convertire gli script di servizio init.d a systemd (CentOS)”

    "Tipo = fokring" è per i servizi che forchetta un bambino e metterlo in background e se stessi usciranno normalmente. Guardando la tua output sembra che i tuoi programmi non lo fanno. cosa succede se si modifica "Tipo = Forcella" a "Tipo = semplice"?

    Innanzitutto, determinare se questi processi fanno fork o no. Se si avvia un process "forking" in un terminal, rilascia il terminal e "entra in background". Tali processi richiedono Type=forking . Altrimenti, se un process non rilascia il terminal a less che non sia terminato con Ctrl + C o metti alla fine della row di command, allora è Type=simple . È così semplice.

    In secondo luogo, hai già detto che ci sono due processi che devono essere avviati in ordine. Hai scritto i file unit per entrambi? In caso contrario, farlo subito.

    In terzo luogo, non dimenticare le dependencies. Se l'ultimo process ( /sbin/cdp/cdpdaemon start ) dipende dall'ex ( /sbin/cdp/cdpagentproxy ), allora è necessario esprimere le esigenze e ordinare dependencies tra di esse nei file unit.

    Se, ad esempio, i file di unità creati sono rispettivamente cdpagentproxy.service e cdpdaemon.service , allora è necessario inserire queste righe nel file unit unit cdpdaemon.service :

     [Unit] Requires=cdpagentproxy.service After=cdpagentproxy.service 

    (Metta queste righe all'interno dell'attuale sezione [Unit] , naturalmente, ho incluso l'intestazione della sezione solo per completezza).

    Quindi eseguire il systemctl daemon-reload , uccidere entrambi i processi e cercare di avviare manualmente l'unità o semplicemente aggiungerlo all'avvio automatico e al riavvio.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.