Flux rss
Collection CommentÇaMarche.net
Rechercher : dans
Par : Mots clés Nom d'utilisateur
Messages sans réponse

SHELL - Envoyer un fichier sur "Port COM"

HP-Bidouille, le samedi 12 novembre 2005 à 01:12:57 
 Signaler ce message aux modérateurs

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)

Configuration: http://hp-home.dyndns.org/hp-home/configuration/materiel/materiel.php

1

kmf31, le samedi 12 novembre 2005 à 08:40:41

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.

Répondre à kmf31

2

kmf31, le samedi 12 novembre 2005 à 09:15:54

J'ai oublie: Pour la 1er ligne avec "Mode COM1: ..." tu peux certainement faire avec "setserial ...". Regarde les options avec "man setserial".

Répondre à kmf31

3

HP-Bidouille, le samedi 12 novembre 2005 à 19:36:52

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

Répondre à HP-Bidouille

4

HP-Bidouille, le samedi 12 novembre 2005 à 19:41:34

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 (...)

Répondre à HP-Bidouille

5

crabs, le samedi 12 novembre 2005 à 19:58:59

Salut,
regarde du coté de stty : man stty
Tu peux préciser la vitesse, le contrôle XON/XOFF, etc...
A+, crabs ..., I think Slackware sounds better than 'Microsoft,'
-- Patrick Volkerding - founder and maintainer of Slackware

Répondre à crabs

6

kmf31, le samedi 12 novembre 2005 à 20:41:27

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.

Répondre à kmf31

7

HP-Bidouille, le samedi 12 novembre 2005 à 23:31:28

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

Répondre à HP-Bidouille

8

HP-Bidouille, le dimanche 13 novembre 2005 à 12:27:34

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((

Répondre à HP-Bidouille

9

kmf31, le dimanche 13 novembre 2005 à 13:00:36

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

Répondre à kmf31

10

HP-Bidouille, le dimanche 13 novembre 2005 à 18:46: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)

Répondre à HP-Bidouille

11

HP-Bidouille, le dimanche 13 novembre 2005 à 19:32:45

No comment (...) :

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

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

HP

Répondre à HP-Bidouille

12

[Dal], le mardi 15 novembre 2005 à 17:52:36

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

Répondre à [Dal]

13

HP-Bidouille, le mercredi 16 novembre 2005 à 19:28:42

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

Répondre à HP-Bidouille

14

 HP-Bidouille, le jeudi 17 novembre 2005 à 00:24:32

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

Répondre à HP-Bidouille
[shell unix] fichier ligne par ligne (Résolu) Bonjour, comment faire défiler un fichier ligne par ligne, de manière à traiter chaque ligne ? Merci de votre aide www.commentcamarche.net/forum/affich-1702792-shell-unix-fichier-ligne-par-ligne
Shell - test: fichier ou répertoire ? (Résolu) Hello, Un petit problème. Je souhaiterias tester si un chemin+fichier est un fichier ou un répertoire. Effectivement le test -d permet de dire s'il s'agit d'un répertoire. Mais seulement un répertoire existant !! Je voudrais savoir s'il s'agit d'un... www.commentcamarche.net/forum/affich-2840007-shell-test-fichier-ou-repertoire
Envoyer des fichiers volumineux par mail Envoyer de gros fichiers à des amis par courrier électronique n'est pas toujours facile. La plupart des serveurs de messagerie n'acceptent pas des fichiers de taille supérieure à 5 Mo. Néanmoins, il existe des solutions alternatives : Les serveurs... www.commentcamarche.net/faq/sujet-2545-envoyer-des-fichiers-volumineux-par-mail
[Shell] Transferer des fichiers via sshSSH - Secure SHell Utilisation Informations complémentaires LOGICIELS Sous Linux/Unix Sous Windows Avertissement Utilisation SSH permet d'utiliser des pipelines de commandes, et d'utiliser des tubes d'entrées/sorties comme toute autre... www.commentcamarche.net/faq/sujet-904-shell-transferer-des-fichiers-via-ssh
Envoyer de gros fichiers (pièces jointes) par mailLes systèmes de messagerie bloquent généralement les pièces jointes volumineuses, alors comment faire parvenir un fichier lourd (de plusieurs Mo) à son destinataire ? La solution consiste à utiliser un service d'hébergement temporaire de fichiers... www.commentcamarche.net/faq/sujet-2966-envoyer-de-gros-fichiers-pieces-jointes-par-mail
[PHP] Upload de fichiersLe langage PHP permet de gérer des fichiers envoyés (uploadés) grâce à un formulaire HTML. Formulaire d'envoi de fichiers Configuration de PHP pour permettre l'upload Récupération du fichier avec PHP Formulaire d'envoi de fichiers La... www.commentcamarche.net/faq/sujet-889-php-upload-de-fichiers
Envoyer fichier via bluetooth Mac (Résolu)Bonjour, je suis sur l'ordi d'un ami et j'aurais besoin d'envoyer un fichier via bluetooth du Mac vers mon portable. Comment fait ton?? merci. www.commentcamarche.net/forum/affich-7443184-envoyer-fichier-via-bluetooth-mac
[shell msdos] Renommer plusieurs fichiers jpg (Résolu)Voilà j'ai ce shell dos que j'ai écrit il y a un an, il a pour but de changer le nom de l'ensemble des fichiers d'une extension donnée dans le répertoire courant par un nom donné suivi d'un chiffre incrémenté à chaque fois. Par exemple dans mon... www.commentcamarche.net/forum/affich-3131290-shell-msdos-renommer-plusieurs-fichiers-jpg
[shell unix] extraire une ligne d'un fichier (Résolu)Bonjour, quelqu'un connait-il un moyen en shell (sh ou bash) d'extraire juste une ligne d'un fichier ? Par exemple la première, la dernière ou la numéro n ? Merci, S. www.commentcamarche.net/forum/affich-9283674-shell-unix-extraire-une-ligne-d-un-fichier
Systèmes UNIX - Le shellIntroduction au shell L'interpréteur de commandes est l'interface entre l'utilisateur et le système d'exploitation, d'où son nom anglais «shell», qui signifie «coquille». Le shell est ainsi chargé de faire l'intermédiaire entre le système... www.commentcamarche.net/contents/unix/unix-shell.php3