Le sous répertoire "fd"(pour "file descriptor") dans le répertoire au /proc/<PID> permet de faire le bilan des "fichiers" (au sens large) accédés par un processus Unix actif. Ci dessous pour le processus OpenHR dont le PID est 16964 :
ps -fp 16964
UID PID PPID C STIME TTY TIME CMD
hradev 16964 1 1 10:41 pts/4 00:00:16 /usr/java1.6/bin/java -Xms64M -Xmx128M -classpath /hradev/openhr/bin/bootstrap.jar
ls /proc/16964/fd
0 10 12 14 16 18 2 21 23 25 27 29 30 32 34 36 38 4 41 43 45 47 49 50 52 54 57
1 11 13 15 17 19 20 22 24 26 28 3 31 33 35 37 39 40 42 44 46 48 5 51 53 55 59
Un "ls -l" affichera (sous Linux) le lien entre le numéro du "descripteur de fichier" et sa cible :
ls -l /proc/16964/fd
lr-x------ 1 hradev hradev 64 18 oct. 10:58 0 -> /dev/null
l-wx------ 1 hradev hradev 64 18 oct. 10:58 1 -> /dev/null
lr-x------ 1 hradev hradev 64 18 oct. 10:58 10 -> /hradev/openhr/lib/commons-codec-1.6.jar
lr-x------ 1 hradev hradev 64 18 oct. 10:58 11 -> /hradev/openhr/lib/commons-net-3.0.1.jar
lr-x------ 1 hradev hradev 64 18 oct. 10:58 12 -> /hradev/openhr/lib/hr-kernel-7.30.03007.1234.jar
lr-x------ 1 hradev hradev 64 18 oct. 10:58 13 -> /hradev/openhr/lib/commons-httpclient-3.1.jar
...
l-wx------ 1 hradev hradev 64 18 oct. 10:58 52 -> /hradev/openhr/logs/ophrs.log (deleted)
On notera que le descripteur de fichier 52 pointe sur un fichier qui a été supprimé : le log de OpenHR.
Toutefois, le processus OpenHR étant encore actif et n'ayant pas libéré le fichier, ce dernier est encore "présent"... Même s'il n'est plus affiché à l'utilisateur qui liste le contenu du répertoire :
ls -l /hradev/openhr/logs/ophrs.log
ls: impossible d'accéder à /hradev/openhr/logs/ophrs.log: Aucun fichier ou dossier de ce type
Il peut donc être consulté, voir recopié (dans un cas comme celui du ophrs.log, n'essayez pas de restaurer le fichier : vous créeriez un "nouveau" fichier log dont le descripteur de fichier sera différent de celui d'origine).
tail /proc/16964/fd/52
2013-10-18 10:41:42,619 INFO [ ][ ][main] - OPHRS1999 OpenHR server is ready for business (Release <7.000>)
2013-10-18 10:42:41,294 INFO [000000B7][188.8.244.10 ][MessageProcessor-2] - OPHRS1077 Queued a new message for service <Default>
2013-10-18 10:44:05,419 INFO [00000305][188.8.244.10 ][MessageProcessor-2] - OPHRS1200 Using strategy <com.hraccess.dispatcher.service.login.uid.SimpleVirtualSessionIdGenerator> to create virtual session IDs
Plus de détails sur : http://www.hackinglinuxexposed.com/articles/20020507.html
18 octobre 2013
11 octobre 2013
BQL-BBAD0012-DEPASSEMENT DE CAPACITE (TABLE WORKING) : WP02-CDSQLD
En cas de message de ce type lors d'une exécution de BQL (par exemple dans K2Y, K22, NJ3, mais surtout NJU, NJN,NJY), ici lors d'une NJU :
*GE01BQL-BBAD0012-DEPASSEMENT DE CAPACITE (TABLE WORKING) : WP02-CDSQLD/000000000000400/000000000000401
C'est sans doute que le programme BQL a utilisé un point de reprise "inopportun".
La table PG50 sert à BQL pour mémoriser son point d'avancement. Ce qui lui permet de reprendre le traitement là ou il été interrompu. La clef de la table est
Si BQL trouve un enregistrement PA7I il utilisera la PG50 pour savoir ou reprendre le chargement interrompu. Et si la PG50 contient de vieilles données, son comportement peut être imprévisible ...
Pour ne pas avoir de problème lors des exécutions de BQL,
Dans le cas de la NJU la carte est alimentée en standard dans le shell. La seule option est donc la purge ...
EXECBQL :echo "PA7IBQL 00"
FDARCNJY:echo "PA7IBQ1"\
FDARCNJY:echo "PA7IBQ2"\
FDNATNJN:echo "PA7IBQ1 £PQ"\
FDNATNJN:echo "PA7IBQ2 £PQ"\
FDPAYK2Y:echo "PA7IK2Y £PQ"\
FDXPGK22:echo "PA7IK22 £PQ"\
FDXPGNJ3:echo "PA7INJ3 S£PQ"\
FDXWDNJU:echo "PA7IBQ1 £PQ"\
FDXWDNJU:echo "PA7IBQ2 £PQ"\
*GE01BQL-BBAD0012-DEPASSEMENT DE CAPACITE (TABLE WORKING) : WP02-CDSQLD/000000000000400/000000000000401
C'est sans doute que le programme BQL a utilisé un point de reprise "inopportun".
La table PG50 sert à BQL pour mémoriser son point d'avancement. Ce qui lui permet de reprendre le traitement là ou il été interrompu. La clef de la table est
- Le code de la chaîne, mais parfois "BQ1'"et "BQ2"
- Un identifiant sur 8 caractères (IDEJOB en général vide)
- Un identifiant sur 4 caractères (IDENT4 en général "BQL ")
- Le code du processus (en général forcé à "*GE01")
- Le numéro de travail.
Si BQL trouve un enregistrement PA7I il utilisera la PG50 pour savoir ou reprendre le chargement interrompu. Et si la PG50 contient de vieilles données, son comportement peut être imprévisible ...
Pour ne pas avoir de problème lors des exécutions de BQL,
- Vérifier que le fichier paramètre est vide (sauf en cas de reprise),
- Sinon supprimez le contenu de la table PG50 pour le numéro de job concerné.
Dans le cas de la NJU la carte est alimentée en standard dans le shell. La seule option est donc la purge ...
EXECBQL :echo "PA7IBQL 00"
FDARCNJY:echo "PA7IBQ1"\
FDARCNJY:echo "PA7IBQ2"\
FDNATNJN:echo "PA7IBQ1 £PQ"\
FDNATNJN:echo "PA7IBQ2 £PQ"\
FDPAYK2Y:echo "PA7IK2Y £PQ"\
FDXPGK22:echo "PA7IK22 £PQ"\
FDXPGNJ3:echo "PA7INJ3 S£PQ"\
FDXWDNJU:echo "PA7IBQ1 £PQ"\
FDXWDNJU:echo "PA7IBQ2 £PQ"\
10 octobre 2013
Parametre hr_design.time_measure_enabled du fichier dispatcher.properties
Avec HRv7 le paramètre hr_design.time_measure_enabled = true du fichier de paramétrage de OpenHR dispatcher.properties permet d'obtenir dans les fichiers des traces Cobol des messages de début et de fin de transaction.
Receiving (16) <flag=0> 16 Received -> 16
|BEGIN_TRAN|9109686|2013-10-10 15:19:11,582097000|
Send (5) <flag=0>.
Receiving (189) <flag=0> 189 Received -> 189
|RECV|9109686|189|2013-10-10 15:19:11,582221000|-5---------6---------7---------8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
XXXXXXXXXXXXXXXX
OPHR XD#-
41
12345678901234567890123456789012345678901234567890123456789012345678901234567890
LONGUEUR: 189
E:2013-10-10 15:19:11,583844:XXXXXXXX:41
Send (4) <flag=0>.
|SEND|9109686|4|2013-10-10 15:19:11,587239000|---5---------6---------7---------8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
9100
12345678901234567890123456789012345678901234567890123456789012345678901234567890
LONGUEUR: 4
|END_TRAN|9109686|0.00|2013-10-10 15:19:11,587352000|2013-10-10 15:19:11|
R:2013-10-10 15:19:11,587495:XXXXXXXX:41
Ceci est de peu d'intérêt : les informations sont les mêmes que les RECV et SEND en moins complet (la taille des paquets et les décimales de l'horodatage de fin des END_TRAN y sont absents).
Receiving (16) <flag=0> 16 Received -> 16
|BEGIN_TRAN|9109686|2013-10-10 15:19:11,582097000|
Send (5) <flag=0>.
Receiving (189) <flag=0> 189 Received -> 189
|RECV|9109686|189|2013-10-10 15:19:11,582221000|-5---------6---------7---------8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
XXXXXXXXXXXXXXXX
OPHR XD#-
41
12345678901234567890123456789012345678901234567890123456789012345678901234567890
LONGUEUR: 189
E:2013-10-10 15:19:11,583844:XXXXXXXX:41
Send (4) <flag=0>.
|SEND|9109686|4|2013-10-10 15:19:11,587239000|---5---------6---------7---------8
12345678901234567890123456789012345678901234567890123456789012345678901234567890
9100
12345678901234567890123456789012345678901234567890123456789012345678901234567890
LONGUEUR: 4
|END_TRAN|9109686|0.00|2013-10-10 15:19:11,587352000|2013-10-10 15:19:11|
R:2013-10-10 15:19:11,587495:XXXXXXXX:41
Ceci est de peu d'intérêt : les informations sont les mêmes que les RECV et SEND en moins complet (la taille des paquets et les décimales de l'horodatage de fin des END_TRAN y sont absents).
8 octobre 2013
Redirection vers une page d'erreur si Tomcat est fermé
Si vous avez installé un serveur Web de présentation (par exemple Apache) en frontal de votre serveur Web d'application (par exemple Tomcat), vous pouvez indiquer au premier une redirection vers une page d'erreur quand le second est inaccessible.
Ci dessous un exemple de paramétrage Apache (fichier httpd.conf) :
DocumentRoot "/hradev/apache/htdocs"
#
# --------------- Page d'erreur specifique
ErrorDocument 503 /hraccess-indisponible.html
et de page HTML d'indisponibilité :
/hradev/apache/htdocs/hraccess-indisponible.html
<HTML>
<HEAD></HEAD>
<FONT SIZE=5><B>HR ACCESS</B></FONT>
<BR>
<BODY TOPMARGIN=100 LEFTMARGIN=100>
L'accès au portail HRaSpace est temporairement indisponible.<BR>
Merci de votre compréhension.
<BR>
</BODY>
</HTML>
Ci dessous un exemple de paramétrage Apache (fichier httpd.conf) :
DocumentRoot "/hradev/apache/htdocs"
#
# --------------- Page d'erreur specifique
ErrorDocument 503 /hraccess-indisponible.html
et de page HTML d'indisponibilité :
/hradev/apache/htdocs/hraccess-indisponible.html
<HTML>
<HEAD></HEAD>
<FONT SIZE=5><B>HR ACCESS</B></FONT>
<BR>
<BODY TOPMARGIN=100 LEFTMARGIN=100>
L'accès au portail HRaSpace est temporairement indisponible.<BR>
Merci de votre compréhension.
<BR>
</BODY>
</HTML>
Inscription à :
Articles (Atom)