SHELL - Envoyer un fichier sur "Port COM&quot

Résolu/Fermé
HP-Bidouille
Messages postés
20
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
17 décembre 2006
- 12 nov. 2005 à 01:12
HP-Bidouille
Messages postés
20
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
17 décembre 2006
- 17 nov. 2005 à 00:24
Bonjour,

Je désire envoyer le contenu d'un fichier vers le port COM de mon serveur à heures régulières via "crontab".

Quelles sont les lignes de commandes permettant :

- d'initialiser et de réinitilialiser le port COM de mon choix
- envoyer un fichier choisi vers ce port COM

??

Mon système fonctionne sous "MS-DOS" sur un PC équipé de Windows 2000 et EasyPHP en utilisant les commandes suivantes :

Mode COM1: BAUD=9600 PARITY=N DATA=8 STOP=2 dtr=off rts=off

et

Type c:\fichier.txt > COM1

J'espère qu'il existe un équivalent exploitable de telles commandes.

MErci d'avance à qui pourra m'aider, je débute avec Linux (...)

:o)

12 réponses

kmf31
Messages postés
1564
Date d'inscription
mercredi 30 mars 2005
Statut
Contributeur
Dernière intervention
22 juin 2007
496
12 nov. 2005 à 08:40
Dans la version la plus primitive (sans aucun protocole) c'est:
cat fichier.txt > /dev/ttyS0

mais je ne suis pas sur si ca marche de cette facon brute. Si on veut faire proprement il vaut mieux utiliser les bons logiciels avec un vrai protocole, par exemple avec kermit (ou gkermit):
http://www.columbia.edu/kermit/
http://www.columbia.edu/kermit/ck80.html
http://www.columbia.edu/kermit/gkermit.html

ou les commandes comme "sx", "sz", "rx" (?) dans le paquet "zmodem":
http://www.linux.com/howtos/Remote-Serial-Console-HOWTO/
http://www.linux.com/howtos/Remote-Serial-Console-HOWTO/upload-zmodem.shtml

Tu trouveras avec google d'autres infos, peut-etre en francais.
0
kmf31
Messages postés
1564
Date d'inscription
mercredi 30 mars 2005
Statut
Contributeur
Dernière intervention
22 juin 2007
496
12 nov. 2005 à 09:15
J'ai oublie: Pour la 1er ligne avec "Mode COM1: ..." tu peux certainement faire avec "setserial ...". Regarde les options avec "man setserial".
0
HP-Bidouille
Messages postés
20
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
17 décembre 2006
4
12 nov. 2005 à 19:36
Bonjour,

Bien merci pour ces réponses.

(Qui plus est, sont arrivées rapidement !) :-)

J'ai parcouru l'aide sur 'SetSerial', on y parle de périphériques "cua" et non tty ?? (l'aide date de 2000 pour setserial peut-être que ça a changé de nom depuis ?)

Concernant "RZ modem", j'ai un peu de mal à saisir le concept. Est-ce que cela correspond à une liaison connue sous le nom de "Z modem" (= Null Modem(?) où l'on ne s'occupe pas du tout des lignes de contrôle du port série) ??

A ce que j'ai pu comprendre, Kermit serait plus adapté pour établir une communication entre deux machines, un peu comme avec un réseau local, si c'est bien ça.

Personnellement, je recherche un moyen vraiment simple pour envoyer une chaîne de caractères depuis mon serveur vers une carte électronique qui reste à l'écoute.

Pous cela, il me faut exploiter le matériel via des lignes de commandes contenues dans un script qui est exécuté à dates fixes par l'intermédiaire de CronD .

Après quelques essais,
cat monfichier.txt > /dev/cua0
a donné satisfaction.

Maintenant, je suis en train de m'arracher les cheveux avec CronD qui n'exécute pas mon script au dates fixées... :o/

Merci encore ! :o)

HP
0
HP-Bidouille
Messages postés
20
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
17 décembre 2006
4
12 nov. 2005 à 19:41
P.S.
Je n'ai pas eu besoin de configurer le port "COM" car ça passe tout seul si je ne dépasse pas une certaine longueur de chaîne à envoyer (de l'ordre de 2 à 3Ko environ) mais, si j'envoit 10Ko, ça donne l'impression d'être planté :o(

Conclusion : il va me falloir trouver une méthode fiable fiable à 100% si jamais les messages dépassent les 2-3Ko (...)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
crabs
Messages postés
908
Date d'inscription
lundi 18 avril 2005
Statut
Membre
Dernière intervention
3 août 2008
506
12 nov. 2005 à 19:58
Salut,
regarde du coté de stty : man stty
Tu peux préciser la vitesse, le contrôle XON/XOFF, etc...
A+, crabs
0
kmf31
Messages postés
1564
Date d'inscription
mercredi 30 mars 2005
Statut
Contributeur
Dernière intervention
22 juin 2007
496
12 nov. 2005 à 20:41
Le kermit est tres bien quand les deux cotes le comprennent. En fait dans l'esprit c'est comme ftp mais directement a travers une connexion serielle sans protocole reseau TCP/IP. Moi je l'utilise entre un PC et une calculatrice (HP48SX) et sur la calcultrice on dispose de kermit mais bien sur il n'y a rien a propos de protocoles reseau (avec IP etc.).

Dans ton cas si tu as l'autre cote un truc super simple, c.-a-d. la carte electronique et si elle ne comprend pas kermit le "cat" est en effet le mieux surtout si ta solution "type ..." en DOS marchait bien. Seulement ce n'est pas elegant et il manque de choses comme corrections d'erreures etc. (quelque chose qui est implementee dans le kermit).
Il y a bien longtemps j'ai imprime en Linux avec une commande "cat ficher > /dev/lp0" (c'est la sortie parrallel pour l'imprimante). Ca marchait correctement mais il n'y a aucune gestion de queue si plusieures personnes veulent imprimer etc. En fait la bonne facon consiste a configurer et demarrer un daemon appele "lpd" qui s'occupe de tout (gestion queue, envoie a l'imprimente, filtre postscript etc.). C'est un peu la meme situation.


Pour le crontab, je te conseille d'abord d'ecrire un script, c.-a-d. un fichier ascii ou tu mets toutes les commandes et apres tu le rends executables avec "chmod +x fichier_script". Apres tu deposes/copies le script dans /bin/... ou /usr/bin/... et tu l'appelles dans le crontab.
Fais aussi attention que dans le script et aussi dans le fichier crontab tu n'utilises que de chemins absolus car dans le context du crontab tu n'a pas forcement le PATH. Explicitement il vaut mieux faire avec:
/bin/cat fichier > /dev/cua0

(au lieu de "cat fichier > /dev/cua0") et parreil dans le fichier crontab:

"... /bin/fichier_script ..." au lieu de "... fichier_script ...".

En fait au lieu de modifier le fichier principale de crontab (le "/etc/crontab") tu peux copier ton script dans un des repertoires:
/etc/cron.daily/..., /etc/cron.hourly/..., /etc/cron.weekly etc.
Avec ca le script sera automatiquement execute soit tous les jours (avec cron.daily), toutes les heurs (avec cron.hourly) ou toutes les semaines (avec cron.weekly). Si ca te convient c'est le plus facile.
0
HP-Bidouille
Messages postés
20
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
17 décembre 2006
4
12 nov. 2005 à 23:31
Ok, ok, ok !

J'ai beaucoup de boulot qui m'attend pour prétendre connaître un jour un minimum de choses sous Linux. ;o)

Bon, histoire de rajouter un peu de piquant, mon petit serveur tourne sous "SME server" alias "e-smith" (cf. http://contribs.org ) qui utilise un système de "Templates".

Si quelqu'un connaît un peu la philosophie du pinguoin qui règne dans mon PC et parle français, je lui serais très reconnaissant de m'indiquer où je dois placer mes fichiers et surtout comment les faire prendre en compte par ce système de Templates.

Je vais vous fournir le contenu des fichiers que j'ai éditer avec pico pour y jeter un oeil.

Encore merci d'avance.
:o)

HP
0
HP-Bidouille
Messages postés
20
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
17 décembre 2006
4
13 nov. 2005 à 12:27
Bonjour,

Voilà la ligne que j'ai ajouté à CronTab :

# Envoie du message toutes les 10 minutes :
*/10 * * * * root /usr/local/scripts/message-carte-elec.sh


Le fichier "message-carte-elec.sh" contient ceci :

#!/bin/sh
# script qui envoit le message contenu dans "message.txt" vers la carte électronique
# 2005-11-11 by HP

# Test de l'existance du fichier "message.txt"
if test -s /tmp/message.txt
then
	# Si le fichier existe, on l'envoie !
	echo date >> /tmp/message.txt
	cat /tmp/message.txt > /dev/cua0
else
	# Sinon, on le dit !
	echo "No Message" > /tmp/message.txt
	echo date >> /tmp/message.txt
	cat /tmp/message.txt > /dev/cua0
fi

# Envoi du message en copie dans l'e-mail
mail -s "Message Carte Electronique" root@192.168.0.1 < /tmp/message.txt

# Suppression du fichier :
rm /tmp/message.txt

# Fin du script !


Apparemment, tout à l'air OK mais rien ne sort sur le port série sauf si je lance en manuel (en étant ROOT) avec :
bash /usr/local/scripts/message-carte-elec.sh


Là, je ne comprends pas. :o((
0
kmf31
Messages postés
1564
Date d'inscription
mercredi 30 mars 2005
Statut
Contributeur
Dernière intervention
22 juin 2007
496
13 nov. 2005 à 13:00
1) Tu n'as pas mis partout de chemins absolus, notamment pas pour le "cat ..." => "/bin/cat ..." et parreil pour "date ..." => "/bin/date ..." et "mail" => /usr/bin/mail ..." (pour "echo" et "rm" je crois ce n'est peut-etre pas necessaire car ce sont de commandes du shell).
RAPPEL: Le chemin absolu est necessaire car le "cron-daemon" n'a pas forcement la meme variable PATH quand tu executes le script a la main!!

2) Je crois il est necessaire ou mieux d'editer le fichier /etc/crontab avec la commande "crontab -e".

3) Apres modification il faut redemarrer le cron-daemon pour tenir comptes des modifs:
/etc/rc.d/init.d/cron stop
/etc/rc.d/init.d/cron start
0
HP-Bidouille
Messages postés
20
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
17 décembre 2006
4
13 nov. 2005 à 18:46
Merci KMF31.

Malheureusement, mon problème reste entier :o(

Au passage :

/etc/init.d/crond restart a bien fonctionné (il fallait le d à la fin de cron ; init.d semble être un alias, sur ma distribution Linux, de rc.d/init.d)

mail n'existe pas dans /usr/bin/ mais dans /etc/bin/


En tout cas, la réinit de Crond m'avait déjà traversé l'esprit car, ne sachant comment m'y prendre, un redémarrage du serveur avait déjà été effectué sans résultat.

Il me semble qu'il y a une histoire avec les "events" (évènements) à déclencher pour le système de "templates" en place avec cette distribution.

Enfin, la commande crontab -e m'affiche des messages d'erreur 319 et me "parle" de vimrc (...) ??

Bon, et bien, ça sent le W.E. prolongé raté à plein nez cette histoire :o((

Et dire que je ne voulais pas me lancer dans une usine à gaz avec un programme en C qui tournerait en non-stop, etc... (de toute façon, il m'aurait fallu le lancer automatiquement au démarrage du serveur...)

J'ai même testé, sans succès, la ligne suivante dans /etc/crontab :
*/1 * * * * root cat /tmp/message.txt > /dev/cua0

(avec un fichier message.txt non vide, bien sûr)

Je suis sûrement tombé sur un "pinguoin" récalcitrant ! ;o)
0
HP-Bidouille
Messages postés
20
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
17 décembre 2006
4
13 nov. 2005 à 19:32
No comment (...) :

http://contribs.org/modules/pbboard/viewtopic.php?p=122856#122856

Je teste ça et vous tiens au courant ;o)

HP
0
[Dal]
Messages postés
5881
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
27 juin 2022
1 002
15 nov. 2005 à 17:52
Salut,

Sauf erreur, en utilisant "crontab -e" pour éditer la table cron de l'utilisateur la nouvelle crontab est réinstallée automatiquement, sans qu'il soit besoin de relancer le démon. C'est la raison pour laquelle l'utilisation de "crontab -e" est le mode recommandé d'édition des tables cron.

Les tables cron gérées par cette commande se trouvent sous "/var/spool/cron". Elles ne devraient pas être éditées manuellement. On y trouve les tables cron des utilisateurs du système (et de root).

Si l'on n'aime pas "vi" ou "vim" (qui est souvent l'éditeur par défaut du système qui s'ouvre avec cette option "-e"), on peut toujours changer la variable d'environnement "EDITOR" ou "VISUAL" pour utiliser l'éditeur de son choix.

Les tables sous /etc contiennent habituellement des fichiers de tâches prédéfinies par le système pour sa maintenance exécutées par crond à des intervalles prédéfinis. Pour ces tables, il doit effectivement être nécessaire de les modifier manuellement et de relancer le démon en revanche... mais ce n'est pas vraiment la place d'un cron d'utilisateur (qui de toutes façons ne devrait pas avoir les droits d'écriture).


Dal
0
HP-Bidouille
Messages postés
20
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
17 décembre 2006
4
16 nov. 2005 à 19:28
Bonsoir,

Concernant Crond, je pense également qu'il ne faut pas intervenir sur ses tâches si son utilisation est dédiée au système plutôt qu'aux utilisateurs.

Concernant la distribution SME, il s'agit d'une distribution Red Hat adaptée pour ne réaliser que des serveurs (Web, Fichiers, Mail , Parre-Feu, etc...) donc, seul l'utilisateur Root est autorisé à intervenir sur le système - bien qu'il soit possible de donner de tels droits à un autre utilisateur.

Pour en revenir au sujet principal, je n'ai pas encore eu le temps de finaliser bien que j'ai enfin réussi (enfin! ) à automatiser l'envoi d'un message sur la console (TTY1) donc, dès que c'est OK, je vous en fait un résumé, ici-même.

Encore bien merci à tous ceux qui m'ont répondu et guidé dans ma démarche.

Cordialement,

HP
0
HP-Bidouille
Messages postés
20
Date d'inscription
mardi 22 février 2005
Statut
Membre
Dernière intervention
17 décembre 2006
4
17 nov. 2005 à 00:24
Re-Bonsoir,

Cette fois, c'est bon !

J'ai enfin réussi à faire fonctionner mon système. :o)

Il fallait utiliser la synthaxe suivante :

*/6 * * * * root /bin/bash /usr/local/scripts/message-carte-elec.sh

pour lancer mon scrip servant à envoyer les messages vers ma carte électronique toutes les 6 minutes.

Maintenant, il me faut résoudre l'envoi de messages de plus de 2-3Ko avec setserial si ce qui m'a été dit à son sujet peu suffir.

Un grand merci à vous tous ! :o)

HP

P.S.
Relancez-moi si aucune doc de résumé n'apparaît lundi prochain (j'espère trouver le temps ce W.E.) ;o)

Episode suivant : http://www.commentcamarche.net/forum/affich-1921595
0