Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.8.0 - Qt Creator : 4.3.0 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

Problème lancement de daemon avec QProcess et systemctl dans Ubuntu

Salut,

J'ai développé sous Ubuntu 14.04 un logiciel qui exploite la sortie "output" d'un démon (snmptrapd lancé avec QProcess). En 14.04 tout fonctionne très bien, mon process intercepte l'output du démon à l'aide di mécanisme Signal/Slot.

j'ai tenté d'installer mon logiciel sur un Ubuntu 15.10. Et là j'ai un message qui montre que mon démon fait un start "via systemctl" .. et mon logiciel n'intercepte plus l'output de celui-ci..

Voilà les résultats de ps aux | grep snmp dans les deux versions de Ubuntu:

sur 15.10:
ps aux | grep snmp
toto 1848 0.0 0.0 4476 844 ? S 14:54 0:00 sh -c sudo /etc/init.d/snmptrapd start
root 1849 0.0 0.2 58952 4040 ? S 14:54 0:00 sudo /etc/init.d/snmptrapd start
root 1850 0.0 0.0 4476 1804 ? S 14:54 0:00 /bin/sh /etc/init.d/snmptrapd start
root 1856 0.0 0.1 30300 2924 ? S 14:54 0:00 /bin/systemctl start snmptrapd.service
root 1857 0.0 0.0 4476 1624 ? Ss 14:54 0:00 /bin/sh /etc/init.d/snmptrapd start
root 1859 0.0 0.2 34792 5080 ? S 14:54 0:00 /usr/local/sbin/snmptrapd -A -Lsd -u root -g root -c /usr/local/share/snmp/snmptrapd.conf -Lf /var/log/snmp/snmptrapd.log -p /var/run/snmptrapd.pid -f -Lo -Le -n
toto 1901 0.0 0.1 13732 2208 pts/17 S+ 14:57 0:00 grep --color=auto snmp

alors que sur 14.04, j'avais ceci:
ps aux | grep snmp
toto 2131 0.0 0.0 4440 652 ? S 15:02 0:00 sh -c sudo /etc/init.d/snmptrapd start
root 2132 0.0 0.1 71260 2136 ? S 15:02 0:00 sudo /etc/init.d/snmptrapd start
root 2133 0.0 0.0 4440 656 ? S 15:02 0:00 /bin/sh /etc/init.d/snmptrapd start
root 2135 0.0 0.1 34744 3128 ? S 15:02 0:00 /usr/local/sbin/snmptrapd -A -Lsd -u root -g root -c /usr/local/share/snmp/snmptrapd.conf -Lf /var/log/snmp/snmptrapd.log -p /var/run/snmptrapd.pid -f -Lo -Le -n
toto 2341 0.0 0.0 15976 936 pts/13 S+ 15:03 0:00 grep --color=auto snmp
Comme vous pouvez le voir, mon démon est lancé avec les options -Lo -Le, ce qui veut dire qu'il "log" dans la sortie standard et celle d'erreur. du coup je crée un SLOT qui intercepte le signal renvoyé par mon QProcess et donc la sortie associée au shell qui me sert à lancer le daemon. Le problème de systemd, c'est que visiblement il passe mon démon par systemctl et la sortie serait donc associée à un autre Shell auquel je n'ai donc pas accès..? donc je ne reçoit jamais de signal associé à la sortie du démon.

Est ce que quelqu'un peut m’expliquer ce qui a changé?

A quoi correspond la ligne [b]/bin/systemctl start snmptrapd.service[/b] et pourquoi du coup j'ai deux fois [b]/bin/sh /etc/init.d/snmptrapd start [/b]sous le 15.10 ?
Que puis-je faire pour continuer à déployer mon application sur les nouvelles versions de Ubuntu?

Merci d'avance ;)


Réponses

  • January 2016 modifié
    Salut,

    Je suis tombé sur cet article qui m'a un peu éclairé mais sans me permettre de trouver une solution pour autant:
    http://www.framboise314.fr/systemd-tout-nouveau-tout-beau-ou-pas/

    Je lance mon démon dans mon programme de cette façon:

    QString program = "sh";
    QStringList arguments;
    arguments << "-c" << "sudo /etc/init.d/snmptrapd start";
    myDaemon->start(program, arguments);
    et je lis sa sortie dans un signal:
    connect(myDaemon, SIGNAL(readyRead()), this, SLOT(readDaemonOutput()));

    ....

    void MainWindow::readDaemonOutput()
    {

    myDaemon->waitForBytesWritten(100);
    QByteArray output = myDaemon->readAll();
    .....
    }

    Le problème c'est que désormais la sortie du démon n'est plus accessible.. Une idée pour la rendre de nouveau accessible avec l'utilisation de systemd ?

    Merci d'avance

    EDIT: oups, je viens de m'apercevoir en reprenant mon code que je n'utilisais pas QProcess (j'ai écrit le premier post un peu rapidement et mon souvenir était visiblement biaisé.. ), mais je n'arrive pas à modifier mon premier message...
  • Bonjour,
    J’ai aussi le même problème si quelqu’un peut m’offrir son aide. J’ai déjà consulté des forums de toutes les couleurs mais cela n’a servi à rien. Je voudrais juste savoir si l’un de vous peut me donner un tutoriel pour que je puisse lancer Daemon avec Qprocess et systemctl dans Ubuntu
Connectez-vous ou Inscrivez-vous pour répondre.