Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.
nombre réponses : 25

#0 -1 »  Conversion string en date/time » Le 07/08/2014, à 16:02

Efhache84
Réponses : 13

Bonjour à tous,

petite demande pour un script, je cherche à vérifier le délai écoulé depuis un accès ssh.

Pour ce faire, dans les logs j'ai des lignes du genre :

Aug  7 12:16:06 (none) authpriv.info dropbear[9655]: exit after auth (root): Exited normally
Aug  7 12:16:06 (none) authpriv.info dropbear[9668]: Child connection from 192.168.12.140:43894

l'information de date et heure je peux l'extraire en utilisant gre et awk, ce qui m'offre ceci :

/tmp # cat /var/log/syslog.log | grep dropbear | awk -F\( '{print $1}'
Aug  7 12:16:06 
Aug  7 12:16:06 
Aug  7 12:16:06 

Désormais je voudrais convertir ce string en un timestamp (ou autre) qui permettrai de le comparer avec le temps courant et de savoir s'il est supérieur ou non à deux heures.

l'utilisation de date -d, n'est pas faisable car ne semble pas apprécier le formattage de la date présente dans le fichier de log.

Quelqu'un aurait-il une idée?

#1 Re : -1 »  Conversion string en date/time » Le 08/08/2014, à 10:17

Efhache84
Réponses : 13

Merci de la réponse, mais comme dis plus haut date -d n'accepte pas ce format dans mon environnement  (embarqué, pas ubuntu, précision que j'ai omise, désolé)

~ # date -d "Aug  8 08:14:00"                                   
date: invalid date 'Aug  8 08:14:00'

Ma version de date : BusyBox v1.15.2 (2009-12-03 15:11:08 CET) multi-call binary

Mon problème est vraiment de convertir ce "Aug 8 08:14:00"  en quelque chose de comparable avec les opérateurs mathématique.

#2 Re : -1 »  Conversion string en date/time » Le 08/08/2014, à 11:25

Efhache84
Réponses : 13
~ # LC_TIME=C date -d "Aug  8 08:14:00"
date: invalid date 'Aug  8 08:14:00'
~ # locale
-sh: locale: not found
~ # 

Je pense que l'utilisation des commandes courante ne sera pas possible, mon environnement est beaucoup trop strippé.

La seule option que j'imagine ce serait une fonction en shell/bash  qui décortique la date pour en faire un format utilisable par date (??)

~ # date --help
BusyBox v1.15.2 (2009-12-03 15:11:08 CET) multi-call binary

Usage: date [OPTIONS] [+FMT] [TIME]

Display time (using +FMT), or set time

Options:
        [-s] TIME       Set time to TIME
        -u              Work in UTC (don't convert to local time)
        -R              Output RFC-822 compliant date string
        -I[SPEC]        Output ISO-8601 compliant date string
                        SPEC='date' (default) for date only,
                        'hours', 'minutes', or 'seconds' for date and
                        time to the indicated precision
        -r FILE         Display last modification time of FILE
        -d TIME         Display TIME, not 'now'
        -D FMT          Use FMT for -d TIME conversion

Recognized formats for TIME:
        hh:mm[:ss]
        [YYYY.]MM.DD-hh:mm[:ss]
        YYYY-MM-DD hh:mm[:ss]
        [[[[[YY]YY]MM]DD]hh]mm[.ss]

Mon approche serait-elle trop overkill ?

#3 Re : -1 »  Conversion string en date/time » Le 08/08/2014, à 11:39

Efhache84
Réponses : 13

ce sera la solution je pense... juste que (murphy n'est pas cool aujourd'hui)  declare n'est pas disponnible ici...   snnifff

#4 Re : -1 »  Conversion string en date/time » Le 08/08/2014, à 12:22

Efhache84
Réponses : 13

c'est ash

BusyBox v1.15.2 (2009-12-03 15:11:08 CET) built-in shell (ash)

mais dans le monde particulier du embedded... donc strippé... ce qui cause mes soucis malheureux

#5 Re : -1 »  Conversion string en date/time » Le 08/08/2014, à 13:44

Efhache84
Réponses : 13

Je dois être un peu bête...

/minimuc # echo "2014 Aug 8 08:14:00" | awk -F "[: ]" -f f1.awk
awk: f1.awk:2: Call to undefined function

ferais-je une erreur en mettant le tout sur deux lignes ?

#6 Re : -1 »  Conversion string en date/time » Le 08/08/2014, à 15:55

Efhache84
Réponses : 13

Bien entendu j'avais créé le fichier...

l'argument version n'est pas reconnu... c'est une version strippée de busybox... et effectivement mktime n'est pas connu

#7 Re : -1 »  [PqLibre]Le geocaching version libre » Le 08/08/2014, à 11:37

Efhache84
Réponses : 2
karamelo a écrit :

Pourquoi libre?
Car via le site officiel il faut un abonnement à 29 € l'année, ce qui à mon goût est un peu chéros

Je ne suis pas d'accord avec cette affirmation. Il ne faut pas d'abonnement pour faire du geocaching.  La simple inscription sur le site geocachin.com  avec un compte gratuit suffit.  L'abonnement ne sert qu'à des outils supplémentaires et non rigoureusement nécessaire : pocket querries, recherches personnalisée, certaines caches sont effectivement réservées aux premium member mais cela représente une petite minorité...

par contre offrir une option de pocket querries gratuite pourquoi pas...

#8 -1 »  [resolu] extraire fichier plus récent de différents sous-dossier » Le 13/08/2012, à 10:07

Efhache84
Réponses : 8

Bonjour à tous et toutes.

Je cherche à réaliser un script bash qui me permettrait de vérifier le contenue d'un dossier (+sous-dossier) et pour chaqu'un extraire le timestamp et le nom du fichier le plus récent.
Je pense que ls -R  peut-être la commande de base, mais j'avoue ne pas trop savoir comment me lancer dans l'aventure.
J'avais commencé à réaliser quelquechose en php, mais malheureusement je ne peut faire tourner du php sur la machine que je veux vérifier (et pas non plus moyen d'installer php) conclusion je dois faire cela en bash.

QUelqu'un aurait-il une idée ? une solution ?



Pour info la version php  :

<?php

date_default_timezone_set("Europe/Brussels");

$config_file_path = '/home/fabian/NetBeansProjects/auto_check_services/config_checker.ini';

//default value
$base_folder_path   = '/home';
$subfolder_exception    = '';
$otherfoldertest ='';
$report_csv_path    = '/srv/www/htdocs/';
$report_html_path = '/srv/www/htdocs/';


openlog("CheckServicesScript",LOG_CONS | LOG_ODELAY | LOG_PERROR | LOG_PID,LOG_LOCAL0);


/** INIT : read config file and set variables**/

include($config_file_path);

if (isset($base_folder))
{
    $base_folder=trim($base_folder);
    if (empty($base_folder));
    else
    {
        if(is_dir($base_folder))
            $base_folder_path=$base_folder;
        else
            syslog(LOG_WARNING, "$base_folder is not a directory");
    }
    
}
syslog(LOG_WARNING, "Base Path folder to check is : $base_folder_path");



if (isset($excepted_folder))
    $subfolder_exception=$excepted_folder;
$subfolder_exception=trim($subfolder_exception);
if (empty($subfolder_exception));
else
    syslog(LOG_WARNING, "Will not check this folder : $subfolder_exception");



if (isset($include_folder))
{
    $include_folder=trim($include_folder);
    if (empty($include_folder));
    else
    {
        if (is_dir($include_folder))
        {    
            $otherfoldertest=$include_folder; 
            syslog(LOG_WARNING, "Will also check folders : $otherfoldertest");
        }
    }
}



if (isset($report_folder))
{
    $report_folder=trim($report_folder);
    if (empty($report_folder));
    else
    {
    if (is_dir($report_folder))
    {    
        $report_csv_path=$report_folder; 

    }
    }
    if($report_csv_path{strlen($report_csv_path)-1}=='/')
    {
        $report_csv_path{strlen($report_csv_path)-1}=' ';
        $report_csv_path=trim($report_csv_path);
    }
}
$report_csv_path=$report_csv_path.'/rerport_check_services.csv';
syslog(LOG_WARNING, "CSV report will be saved into:$report_csv_path");




if (isset($html_folder))
{
    $html_folder=trim($html_folder);
    if (empty($html_folder));
    else
    {
    if (is_dir($html_folder))
    {    
        $report_html_path=$html_folder; 

    }
    }
    if($report_html_path{strlen($report_html_path)-1}=='/')
    {
        $report_html_path{strlen($report_html_path)-1}=' ';
        $report_html_path=trim($report_html_path);
    }
}
$report_html_path=$report_html_path.'/checkservices.html';
syslog(LOG_WARNING, "HTML report will be saved into:$report_html_path");


//syslog(LOG_WARNING, "$base_folder_path $subfolder_exception $otherfoldertest $report_csv_path $report_html_path");

/** CHECKING : get date of the earlier file in the folder
 *  and verify that the date is within last two hours 
 */

 
$tab=array();
$j=0;

lister($base_folder_path,$j,$tab,$subfolder_exception);
checktimestamp($tab);
//print_r($tab);



/** REPORT : create report file CSV **/

$reportfilecsv=fopen($report_csv_path, 'a');
fputs($reportfilecsv,"list of folder without data :\n");
for($j=0;$j<count($tab);$j++)
{
    if($tab[$j][2]==1)
    {
        $logmsg=$tab[$j][0].';'.$tab[$j][1]."\n";
        syslog(LOG_WARNING, "$logmsg");
        fputs($reportfilecsv,$logmsg);
    }
}
fclose($reportfilecsv);


/** HTML REPORT : create report table in html **/




/*** FUNCTIONS ***/
function lister($chemin,&$indextab,&$tablist,$direxception )
{
    $nom_repertoire = $chemin;
    $pointeur = opendir($nom_repertoire);

    while ($fichier = readdir($pointeur))
    {
        if(($fichier != '.') && ($fichier != '..'))
        {
            if (is_dir($nom_repertoire.'/'.$fichier) && $fichier!=$direxception)
            {
                $tablist[$indextab][0]="$nom_repertoire/$fichier";
                $plusrecent=array(0 => 0, 1 => '' );
                $fichiers=glob($tablist[$indextab][0].'/backup');
                foreach($fichiers as $fichier2)
                {
                    if(filemtime($fichier2)>$plusrecent[0])
                    {
                        $plusrecent=array(0 => filemtime($fichier2), 1 => $fichier2);
                        $tablist[$indextab][1]=date ("Y-m-d H:i:s",filemtime($fichier2));
                        $tablist[$indextab][2]=0;
                    }
                }
                 
                 
                  $indextab++;
            }
        }
    }
    closedir($pointeur);
}

function checktimestamp(&$listfolder)
{
    $timeRef = date('Y-m-d H:i:s',strtotime('-2 hours'));  //reference time is two hours ago
    
    for($j=0;$j<count($listfolder);$j++)
    {
        $timeDiff = strtotime($timeRef) - strtotime($listfolder[$j][1]);
        
        if($timeDiff>0)
            $listfolder[$j][2]=1;
    }
}

?>

#9 Re : -1 »  [resolu] extraire fichier plus récent de différents sous-dossier » Le 13/08/2012, à 10:40

Efhache84
Réponses : 8

ok pour le timestamp avec stat ??

sinon la boucle que tu me donnes sembles aussi me lister un sous-sous-repertoire. en php je pourrais virer cela avec un isdir, mais en bash comment filtrer cela?

#10 Re : -1 »  [resolu] extraire fichier plus récent de différents sous-dossier » Le 13/08/2012, à 11:02

Efhache84
Réponses : 8

ok merci beaucoup.

par contre je me rends compte que je souhaite inverser la recherche. Je souhaiterais les directory qui n'ont pas été modifié endéans x minutes (120 minutes par exemple)  est-ce faisable ?

#12 -1 »  ubuntu 10.04 LTS - root comme unique utilisateur sans mot de passe ? » Le 30/04/2012, à 16:44

Efhache84
Réponses : 7

Hello les amis,

j'ai besoin pour une raison particulière d'avoir une ubuntu (10.04) avec un seul unique et utilisateur : ROOT  et seulement lui. De plus sans mot de passe, donc avec connexion automatique.

Je sais, cela est mal et dangereux, mais ça m'est imposé, pas le choix.

Comment parvenir à faire ce viol de buntu ?  est-ce que supprimer le petit  "x" dans le /etc/password et supprimer toute autre etnrée d'utilisateur pourrait régler le problème?


En espérant que vous aurez une idée... :-)


EDIT : userdel et passwd -d   m'ont aidé pour ne garder que root sans mot de passe.... maintenant comment faire pour que la machine se log automatiquement sous root... sans que je ne doive cliquer sur "login" et taper l'utilsateur "root" ?

#13 Re : -1 »  ubuntu 10.04 LTS - root comme unique utilisateur sans mot de passe ? » Le 02/05/2012, à 12:49

Efhache84
Réponses : 7

Si j'ai indiqué cela c'est bel et bien pour éviter d'avoir ce genre de réponse.  le choix ne dépend pas de moi.  Et accessoirement je n'ai pas à subir d'insulte gratuite...

Est-ce que quelqu'un aurait toutefois une réponse plus utilisable que "con" ?

#14 Re : -1 »  ubuntu 10.04 LTS - root comme unique utilisateur sans mot de passe ? » Le 02/05/2012, à 13:11

Efhache84
Réponses : 7

J'ai trouvé de moi même la solution... et je l'indique ici à titre informatif... n'en déplaise à certains...

1.  en console faire un

sudo passwd -d root

  pour supprimer le password de root donner par défaut dans ubuntu et qui est inconnu. Le login comme root devient possible, sans mot de passe
2. supprimer les autres utilisateurs de la machine (devenu innutile dans ce cas de figure) : commande userdel
3. ouvrir le fichier /etc/gdm/custom.conf.  Eventuellement avec gksudo gedit /etc/gdm/custom.conf pour les utilisateurs d'un environnement graphique
Dans ce fichier indiquer les lignes suivantes :
modif de custom.conf


Redémarrer et voila....


!!!!!!!!!!  à vos risques...  ça a marché chez moi...

#16 -1 »  11.10 et gnome 3 » Le 23/09/2011, à 14:32

Efhache84
Réponses : 5

cela fait un moment que je n'ai plus suivi l'évolution d'ubuntu... (pire je n'ai plus suivi l'évolution de linux... ouch)

je me remets à jour et lors de mes petites recherche, je constate que la 11.04  a adopté un environnement de bureau appéllé Unity et non plus gnome comme précémdent.

Est-ce que gnome est abandonné dans les versions ubuntu désormais ?  La prochaine version n'adoptera pas le gnome 3?

#17 Re : -1 »  11.10 et gnome 3 » Le 23/09/2011, à 15:21

Efhache84
Réponses : 5

j'ai en effet regardé un peu Unity et je pense que je vais me cataloguer dans "ceux qui n'aiment pas", un environnement netbook like ne me plait pas sur qqch qui n'est pas un gadget. Mais ça n'engage que moi.
Par contre je trouve dommage qu'ubuntu abandonne gnome comme ça...  je préférais la "séparation" Kubuntu avec KDE, ubuntu gnome et xubuntu xfce... mais bon... au pire si vraiment rester sous ubuntu est pénible avec unity il y a moyen de changer aussi.


Merci pour les éclaircissements en tout cas smile

#18 Re : -1 »  Bash script redémarant des process qui meurent » Le 16/06/2011, à 17:22

Efhache84
Réponses : 22

Ok je suis peut-être idiot, mais pourquoi  mettre ":;"  après le while?

cela réalise une sorte de "true" ?

Et sinon probablement qu'il vaut mieux que j'ajoute un sleep d'une dizaine de seconde pour être sûr qu'il ne tourne pas comme un malade dans le script et ainsi être sûr qu'il ne bouffe pas le cpu, non?

EDIT : par contre pgrep n'est pas disponnible, donc je vais utiliser un ps | grep  avec un cut ou qqch du genre.

Merci pour la piste, je vais essayer ça

#19 Re : -1 »  Bash script redémarant des process qui meurent » Le 17/06/2011, à 09:32

Efhache84
Réponses : 22

Juste une petite aide encore avec mon remplacement de pgrep...

imaginons un process qui s'appelle webcommanager.

ps | grep webcommanager

me renvoit

root@ptxblackbox:~ ps | grep webcommanager
  159 root       7684 R   ./webcommanager
  172 root       7684 S   ./webcommanager
  174 root       7684 S   ./webcommanager
  447 root       2052 S   grep webcommanager

si je complète avec un cut et quelques infos... j'obtiens juste le nom... malheureusement plusieurs fois puisque ps répertorie chaque threat de ce process ainsi que l'utilisation de grep

ainsi

ps | grep webcommanager | cut -d'/' -f2

me donne presque ce que je désire :

root@ptxblackbox:~ ps | grep webcommanager | cut -d'/' -f2
webcommanager
webcommanager
webcommanager
  454 root       2052 S   grep webcommanager

mais maitenant comment faire pour n'obtenir que la première ligne de ce résultat ?  puisque je cherche à remplacer pgrep...

#20 Re : -1 »  Bash script redémarant des process qui meurent » Le 17/06/2011, à 11:32

Efhache84
Réponses : 22

ah je ne connaissais pas awk, voila qqch de nouveau.  merci beaucoup ;-)

#21 Re : -1 »  Bash script redémarant des process qui meurent » Le 17/06/2011, à 11:41

Efhache84
Réponses : 22

sans doute ai-je fait une bêtise mais le comportement du script est assez étonnant

cd /pcsfolder
plist="[w]ebcommanager [l]cddrive"

while :; do
    for proc in $plist; do
    ps | awk 'BEGIN { FS="/" } /'"$proc"'/ { print $2 ; exit }' || {
        echo "Respawning $proc"
        eval "$proc"
        }
    done
    sleep 10
done

et à l'éxécution du script j'obtiens :

root@ptxblackbox:~ ./watchdog_script
  }
  }

donc une accolade apparaissant toutes les 10 secondes, mais aucun des process n'est démarré...  je ne suis pas spécialiste du script bash donc il y a sûrement une erreur dans ce que j'ai écrit mais je ne la trouve pas.

#22 Re : -1 »  Bash script redémarant des process qui meurent » Le 17/06/2011, à 16:20

Efhache84
Réponses : 22
AnsuzPeorth a écrit :

(...)

cd /pcsfolder
plist="webcommanager lcddrive"

while :; do
    # peut être pas besoin de lancer un ps pour chaque exe à checker ?
    data_ps=$(ps)
    for proc in ${plist}; do
        if ! grep -q /${proc} <<< "${data_ps}"; then
           #pas besoin de eval ! Et les commandes ne devraient pas être lancé en arrière plan ?
           ${proc} &
        fi
    done
    sleep 10
done

Elle seront lancé tel quel

start-stop-daemon -S -b -x ./webcommanager
AnsuzPeorth a écrit :

(...)
EDIT3:
pfff, j'en ai des choses à dire big_smile
Je connais pas tes softs, mais si ils gardent la main, et que tu veux qu'il tournent tous le temps, pourquoi ne pas faire simplement un script qui lance tes commandes dès le départ, et les relancer dès qu'elle rendent la main. Au besoin, créer un fichier dans tmp pour arrêter la boucle.
Il n'y aura aucune commande ou autre sleep.
genre:

Webcom()
{
webcommanager
Webcom
}
Lcddrive()
{
lcddrive
Lcddrive
}
Webcom &
Lcddrive &

Actuellement un script pour les lancer contient une série de start-stop-daemon comme montré ci-dessus.

Jusque là tout va bien, mais je veux me prémunir contre les arrêts éventuels de process. Donc ici l'idée serait de toujours les lancer par un script mais de faire une sorte de monitoring qui va vérifier qu'ils sont toujours actif comme process et sinon les relancer.

Eventuellement par une tâche cron... comme autre option ?

J'en suis aux essais et réflexion pour l'instant. L'idée est d'essayer de faire ça avec une souplesse script et de ne pas s'amuser à écrire un soft watchdog...
Donc je suis ouvert à toute idée.

#23 Re : -1 »  Bash script redémarant des process qui meurent » Le 20/06/2011, à 09:01

Efhache84
Réponses : 22

Petites précisions.

Actuellement je possède un script qui ne fait que lancer une série d'éxécutable (process écrit en C), ils sont lancés comme décrit ci-dessus.
La liste des process à lancer (et qui restent actifs) peut varier au cours du temps. (il peut y en avoir plus ou moins donc)

En fait je veux simplement m'assurer avec une solution simple et flexible que les process tournent et si l'un d'eux ne tourne plus qu'il soit simplement relancé (ou si cela est finalement plus simple, si l'un d'eux meurt, on coupe tout et on relance toute la lsite de process)

#24 Re : -1 »  Bash script redémarant des process qui meurent » Le 20/06/2011, à 12:24

Efhache84
Réponses : 22
FRUiT a écrit :
Efhache84 a écrit :

lancer une série d'éxécutable

Oui mais..... Combien ? En moyenne ? ...2 ? ...20 ? ...200 ?

une quinzaine


en effet ce n'est pas un script qu'il faut surveiller mais bien les process qui sont lancés.

maintenant peut-être que je me trompe en imaginant que ce serait surveillable par script