Posts mit dem Label Script werden angezeigt. Alle Posts anzeigen
Posts mit dem Label Script werden angezeigt. Alle Posts anzeigen

21.11.16

Systemd - eigenen Service erstellen

Zunächst erstelle ich ein kleines Script in

/usr/local/bin/myscript

Darin wird testweise alle 5 Sekunden eine Zeile an den Logger (syslog) geschickt.
Damit es auch über den Service beendet werden kann, wird ein trap eingebaut.

#!/bin/bash

killit()
{
    echo "...Ende" | logger
    exit 0
}
trap killit HUP

while true; do


    sleep 5
    echo "...sleeping" | logger
done

 Ausführbar machen mit

chmod +x /usr/local/bin/myscript


Nun erstelle ich die Datei
/lib/systemd/system/myscript.service

mit folgendem Inhalt:
 [Unit]
Description=My own little script
After=network.target.

[Service]
#EnvironmentFile=
ExecStart=/usr/local/bin/myscript
ExecStop=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=myscript.service

Den Service aktivieren mit

systemctl enable myscript

Status  anzeigen lassen mit

service myscript status

Starten mit
service myscript start

Im Systemlog (/var/log/syslog) sollten nun alle 5 Sekunden neue Einträge auftauchen.
Service stoppen mit

service myscript stop

Sehr schön ist in diesem Zusammenhang das Zusammenspiel mit journalctl.

Ein

journalctl -u myscript.service listet nur die Einträge des soeben definierten Services auf.

27.10.16

Joomla - Inhalte per Script auf neue Version übertragen

Ich stand vor dem Problem, die Inhalte einer ziemlich alten Joomla Version (V 1.5) auf eine neue Joomla Installation zu übertragen.

Hier ein schnell dahin gehacktes Script. Dieses muss noch mit den Zugangsdaten der alten und neuen Datenbank angepasst werden. Dann noch die Startwerte von  $rgt und $lft anpassen. Ich habe keine Ahnung, wozu sie sind. Auf jeden Fall müssen sie hochgezählt werden. Einfach mal in die Tabelle assets nach den entsprechenden Spalten gucken und die letzten Werte +1 übernehmen in das Script.

<?php


$prefix = "c27gy_";
$rgt = 36;
$lft = 35;

class mydatabase
{

    var $database = "";
    var $prefix = "c27gy_"; // Prefix der Joomla Tabellen

   
    function db_connect($database)
    {
       
        $user = "[user]";
        $pw = "[PASSWORD]";

        $mysqli = new mysqli("localhost", $user, $pw, $database);
        /* check connection */
        if (mysqli_connect_errno())
        {
            $error = "Connect failed: " . mysqli_connect_error();
            //$this->errorReport($error, true);
            exit();
        }
        $mysqli->query("SET NAMES 'utf8'");
        return $mysqli;
    }


    function getAssetID($title, $lft, $rgt, $name)
    {
       
        $sql_asset = "INSERT INTO " . $this->prefix . "assets
    (level,name,title, lft, rgt, parent_id, rules)
    VALUES
    ('3', '$name','$title', '$lft', '$rgt', '27','{\"core.admin\":{\"7\":1},\"core.manage\":{\"6\":1},\"core.create\":{\"3\":1},\"core.delete\":[],\"core.edit\":{\"4\":1},\"core.edit.state\":{\"5\":1},\"core.edit.own\":[]}')";
        $link=$this->db_connect("[DATABASE]");
        $link->query($sql_asset);
        //echo "DEBUG $sql_asset <br>";
        return $link->insert_id;
    }

    function truncateTables()
    {
        $link=$this->db_connect($this->db_new);
        // Die u.a. id anpassen!!! Nicht, dass existente Datensätze gelöscht werden
        $link->query("DELETE FROM " . $this->prefix . "assets WHERE id > 65");
        $link->query("TRUNCATE TABLE " . $this->prefix . "content");
        $link->query("TRUNCATE TABLE " . $this->prefix . "content_frontpage");
       
    }
}

$db = new \mydatabase();
// ACHTUNG: NICHT UNBEDINGT NÖTIG!!
//$db->truncateTables(); // Tabellen leeren bzw. Einträge löschen

// Mit den Datenbanken verbinden
$link = $db->db_connect("[DATABASE]");
$link1 = $db->db_connect("[DATABASE_OLD]");
// Daten aus der alten Tabelle holen
$sql_abfrage = "SELECT * FROM jos_content where state=1 ORDER by created DESC";
$result = $link1->query($sql_abfrage);
$zaehler = 0;
while ($row = $result->fetch_array())
{
    $zaehler++;

    echo $zaehler . " " . $row['alias'] . "<br>";
    $title = $row['title'];
    $alias = $row['alias'];
    $introtext = $row['introtext'];
    $fulltext = $link->real_escape_string($row['fulltext']);
    $created = $row['created'];
    $old_id=$row['id'];
    $id = $db->getAssetID($title, $lft, $rgt, "com_content.article." . $old_id);
    $rgt+=2;
    $lft+=2;
    $sql_insert = "INSERT INTO ${prefix}content (
                asset_id,
                title,
                alias,
                state,
                catid,
                introtext,
                `fulltext`,
                language,
                created, publish_up,
                featured,
                version,
                access)
VALUES('$id', '$title',
        '$alias',
        1,
        2,
         '$introtext',
         '$fulltext',
         '*',
        '$created', '$created',
         1,
         2,
         1)";
    if(!$link->query($sql_insert))
    {
        echo "Fehler! " . $link->error . "<br>$sql_insert";
    }
    $content_id=$link->insert_id;
   
    $sql_frontpage="INSERT INTO ${prefix}content_frontpage (content_id, ordering)
    VALUES ('$content_id', '$zaehler')";
    if(!$link->query($sql_frontpage))
    {
        echo "Fehler! " . $link->error . "<br>$sql_frontpage";
    }
}

20.10.15

Anruf von der FB über ein Bash-Script

Ziel:
Ich möchte automatisiert bei bestimmten Ereignissen angerufen werden.
Meine Fritzbox 7240 bietet ein Telnet-Login, wodurch ich durch Eingabe von

 echo 'ATDT[RUFNUMMER]' | nc 127.0.0.1 1011

einen Anruf veranlassen kann.

Das Ganze lässt sich mittels 'expect' auch mit einem Bash-Script realisieren.

Expect lässt sich auf einem Ubuntu System über

apt-get install expect installieren.

Dann muss man nur noch eine Befehlsdatei 'phone_me' anlegen, die folgenden Inhalt haben kann:

spawn telnet 192.168.1.1
expect "password:"
send "PASSWORT\n"
expect "#"
send  "echo 'ATDT[RUFNUMMER' | nc 127.0.0.1 1011 \n"
expect "OK"

Durch Eingabe von

expect phone_me

wird automatisiert ein telnet-Login durchgeführt und anschließend die Befehle abgearbeitet.
Bei manchen Fritzboxen kann anstelle des '#' auch etwas anderes nach dem Login erscheinen. Dieses also ggfs. anpassen.

Openhab und Ecoflow Max - API Anbindung

 Ich wollte die neu erworbene Powerstation in Openhab einbinden, um den aktuellen Status (Ladestand etc.) über Openhab auswerten zu können. ...