Une place pour une véritable innovation. Partagez vos propres utilitaires créés avec la communauté Manjaro.
Questions et discussions sur la programmation et le codage.
Répondre

Procédure pour envoyer une copie d'écran web par mail

#1Messageil y a 6 ans

Dans l'idée d'envoyer, par exemple tous les jeudis, un mail reprenant une page web, j'ai fait les procédures suivantes :

Installé de quoi convertir les pages en pdf :

sudo pacman -S xorg-server-xvfb
sudo pacman -S wkhtmltopdf


qui permet de :

xvfb-run wkhtmltopdf l'url/que/je/veux ~/Documents/lenomdemon.pdf



Pour envoyer les mails deux outils également :

sudo pacman -S mailutils


La touche [Tab] pour sélectionner : "pas de configuration"
Puis

sudo pacman -S ssmtp


Puis J'ai édité les deux fichiers de config de ssmtp :

gksudo gedit /etc/ssmtp/ssmtp.conf


Mis dedans :

#
# /etc/ssmtp.conf -- a config file for sSMTP sendmail.
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=monadresseemetteur@mondomaine.truc
AuthUser=monadresseemetteur@mondomaine.truc
AuthPass=monmotdepasse

# The place where the mail goes. The actual machine name is required
# no MX records are consulted. Commonly mailhosts are named mail.domain.com
# The example will fit if you are in domain.com and you mailhub is so named.
mailhub=monserveursmtp:465
UseTLS=YES

# Where will the mail seem to come from?
# rewriteDomain=y
# The full hostname
# hostname=localhost.localdomain
rewriteDomain=mondomaine
hostname=prefixedomaine
FromLineOverride=YES


(465 peut-être remplacé par 587 si Gmail ou autre truc bizarre - UseTLS=YES peut être remplacé par UseSSLTLS=YES si besoin)

Puis

gksudo gedit /etc/ssmtp/revaliases


Mis dedans :

# sSMTP aliases
#
# Format:   local_account:outgoing_address:mailhub
#
# Example: root:your_login@your.domain:mailhub.your.domain[:port]
# where [:port] is an optional port number that defaults to 25.
root:monadresseemetteur@mondomaine.truc:monserveursmtp:465
user:monadresseemetteur@mondomaine.truc:monserveursmtp:465


(465 peut-être remplacé par 587 si on veut émettre de Gmail ou autre truc bizarre)

Puis créé un script (mailjeudi.sh):

#!/bin/bash

xvfb-run wkhtmltopdf l'url/que/je/veux ~/Documents/lenomdemon.pdf

echo -e "Voilà le message tant attendu\nBien à toi\nAlfred" | mailx -s "Le mail du jeudi" -a ~/Documents/lenomdemon.pdf adressedemondestinataire@sondomaine.com


Jusque là ça fonctionne presque. (ça crée le pdf et envoie le mail chez moi, mais au lieu d'avoir monadresseemetteur@mondomaine.truc mais... ça arrive avec comme émetteur monlogin@mondomaine.truc)

Maintenant, Pour l'automatiser, plutôt que cron, j'ai voulu utiliser systemd timer :

J'ai créé un /etc/systemd/system/jeudi.timer (pas réglé sur jeudi, mais sur 10 secondes pour tester) :

[Unit]
Description= test jeudi

[Timer]
OnUnitActiveSec=10s
OnBootSec=10s

[Install]
WantedBy=timers.target


(le timer sera bien sûr à amender pour l'envoyer chaque jeudi)

Et un /etc/systemd/system/jeudi.service :

[Unit]
Description=test jeudi

[Service]
Type=oneshot
ExecStart=/home/monlogin/Desktop/mailjeudi.sh

[Install]
 WantedBy=weekly-backup.target


Puis bien sûr :

systemctl start jeudi.timer



Mais là, ça plante ! ni wkhtmltopdf, ni mailx ne passent !

Une vérif avec :

journalctl  -xe


me le confirment...

Est-ce une coquetterie de systemd, cron ferait il mieux , comment paramétrer cron dans ce cas ?

Et... comment avoir comme sender monadresse et pas monlogin ?

Procédure pour envoyer une copie d'écran web par mail

#2Messageil y a 6 ans

salut,

tu ne nous remontes pas les erreurs :confus: mais je suppose que c'est ton service
1) dans ton service, il faut supprimer ton target ! (un copier/coller d'autre chose ?)
ensuite tu dois tester uniquement ton service systemctl start jeudi
Attention, la (seule) différence avec la console c'est qu'avec un service l'user est root, a voir si smtp fonctionne bien

dans ssmtp.conf j'ai:

hostname=moi@monserveur.fr

Procédure pour envoyer une copie d'écran web par mail

#3Messageil y a 6 ans

Oups :

~]$ systemctl start jeudi
Job for jeudi.service failed because the control process exited with error code.
See "systemctl  status jeudi.service" and "journalctl  -xe" for details.


~]$ systemctl  status jeudi.service
lines 1--1...skipping...
● jeudi.service - test jeudi
   Loaded: loaded (/etc/systemd/system/jeudi.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Fri 2017-10-06 14:29:09 CEST; 3min 13s ago
  Process: 5950 ExecStart=/home/asatysco2/Desktop/mailjeudi.sh (code=exited, status=4)
 Main PID: 5950 (code=exited, status=4)

oct. 06 14:29:08 ordi2 wkhtmltopdf[5971]: QPainter::drawGlyphRun: Painter not active
oct. 06 14:29:08 ordi2 wkhtmltopdf[5971]: QPainter::setPen: Painter not active
oct. 06 14:29:08 ordi2 mailjeudi.sh[5950]: /usr/sbin/xvfb-run: line 170:  5971 Segmentation fault      (core dumped) DISPLAY=:$SERVERNUM XAUTHORITY=$A
oct. 06 14:29:08 ordi2 mailjeudi.sh[5950]: mail: Failed to create encoded message: Illegal byte sequence
oct. 06 14:29:08 ordi2 mailjeudi.sh[5950]: /root/dead.letter 5/87
oct. 06 14:29:08 ordi2 mailjeudi.sh[5950]: mail: ... message not sent
oct. 06 14:29:08 ordi2 systemd[1]: jeudi.service: Main process exited, code=exited, status=4/NOPERMISSION
oct. 06 14:29:09 ordi2 systemd[1]: Failed to start test jeudi.
oct. 06 14:29:09 ordi2 systemd[1]: jeudi.service: Unit entered failed state.
oct. 06 14:29:09 ordi2 systemd[1]: jeudi.service: Failed with result 'exit-code'.
~
~
~
~
~
~
~
~
~
~
~


~]$ journalctl  -xe
                                               Stack trace of thread 5987:
                                               #0  0x00007f0d20e0f38d pthread_cond_wait@@GLIBC_2.3.2 (libpthread.so.0)
                                               #1  0x00007f0d2562748d __gthread_cond_wait (libstdc++.so.6)
                                               #2  0x00007f0d22ec38d9 _ZN3WTF10ParkingLot17parkConditionallyEPKvSt8functionIFbvEES3_IFvvEENSt6chrono10
                                               #3  0x00007f0d22ec25e0 n/a (libQt5WebKit.so.5)
                                               #4  0x00007f0d22ec6898 n/a (libQt5WebKit.so.5)
                                               #5  0x00007f0d22ef8eea n/a (libQt5WebKit.so.5)
                                               #6  0x00007f0d20e0908a start_thread (libpthread.so.0)
                                               #7  0x00007f0d2509c1bf __clone (libc.so.6)
                                               
                                               Stack trace of thread 5983:
                                               #0  0x00007f0d20e0f38d pthread_cond_wait@@GLIBC_2.3.2 (libpthread.so.0)
                                               #1  0x00007f0d2562748d __gthread_cond_wait (libstdc++.so.6)
                                               #2  0x00007f0d22ec38d9 _ZN3WTF10ParkingLot17parkConditionallyEPKvSt8functionIFbvEES3_IFvvEENSt6chrono10
                                               #3  0x00007f0d22842207 n/a (libQt5WebKit.so.5)
                                               #4  0x00007f0d22ec6898 n/a (libQt5WebKit.so.5)
                                               #5  0x00007f0d22ef8eea n/a (libQt5WebKit.so.5)
                                               #6  0x00007f0d20e0908a start_thread (libpthread.so.0)
                                               #7  0x00007f0d2509c1bf __clone (libc.so.6)
                                               
                                               Stack trace of thread 5986:
                                               #0  0x00007f0d20e0f38d pthread_cond_wait@@GLIBC_2.3.2 (libpthread.so.0)
                                               #1  0x00007f0d2562748d __gthread_cond_wait (libstdc++.so.6)
                                               #2  0x00007f0d22ec38d9 _ZN3WTF10ParkingLot17parkConditionallyEPKvSt8functionIFbvEES3_IFvvEENSt6chrono10
                                               #3  0x00007f0d22ec25e0 n/a (libQt5WebKit.so.5)
                                               #4  0x00007f0d22ec6898 n/a (libQt5WebKit.so.5)
                                               #5  0x00007f0d22ef8eea n/a (libQt5WebKit.so.5)
                                               #6  0x00007f0d20e0908a start_thread (libpthread.so.0)
                                               #7  0x00007f0d2509c1bf __clone (libc.so.6)
-- Subject: Le processus 5971 (wkhtmltopdf) a généré un fichier « core »
-- Defined-By: systemd
-- Support: https://lists.freedesktop.org/mailman/listinfo/systemd-devel
-- Documentation: man:core(5)
--
-- Le processus 5971 (wkhtmltopdf) a planté et généré un fichier « core ».
--
-- Cela indique généralement une erreur de programmation dans le programme
-- incriminé, et cela devrait être notifié à son concepteur comme un défaut (bug).


Sinon, le smtp fonctionne : à chaque fois que je lance le script à la main, je reçois le mail.

Procédure pour envoyer une copie d'écran web par mail

#4Messageil y a 6 ans

ok c'est donc ton programme wkhtmltopdf qui plante
je ne connais pas ce programme, a vue de nez, lui passer dbus voir qu'il faut lui indiquer un DISPLAY ?

Procédure pour envoyer une copie d'écran web par mail

#5Messageil y a 6 ans

Merci !
Bon, je ne connais pas du tout dbus, aussi !
Sinon, c'est à cause de ce style de doute que j'ai ajouté le xvfb-run car le script, lui, fonctionne sans que je ne voie la moindre sollicitation d'un moniteur avec et sans xvbf.
C'est systemd qui semble ne pas aimer.
Répondre