Viele Aufgaben können in i-doit durch das CLI Tool Controller automatisiert werden. Dies machen wir uns zu Nutze, um die IT-Dokumentation regelmäßig zu warten.
Einrichten ja oder nein?
Die Einrichtung von Cronjobs ist optional, doch es gibt eine klare Empfehlung, diese auf jeden Fall einzurichten - bestenfalls direkt nach der Installation.
#!/bin/bash
##
## i-doit console
##
##
## Copyright (C) 2017-18 synetics GmbH, <https://i-doit.com/>
##
## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU Affero General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU Affero General Public License for more details.
##
## You should have received a copy of the GNU Affero General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
##
set -euo pipefail
##
## Configuration
##
INSTANCE_PATH="/var/www/html/i-doit"
APACHE_USER="www-data"
ARGS="$*"
##--------------------------------------------------------------------------------------------------
function execute {
local prefix=""
local console="php console.php $ARGS"
test "$(whoami)" != "$APACHE_USER" && prefix="sudo -u $APACHE_USER "
eval "${prefix}${console}" || abort "i-doit console exited with non-zero status"
}
function setup {
cd "$INSTANCE_PATH" || abort "No i-doit instance found under '${INSTANCE_PATH}'"
}
function finish {
exit 0
}
function abort {
echo -e "$1" 1>&2
echo "Operation failed. Please check what is wrong and try again." 1>&2
exit 1
}
function log {
echo -e "$1"
}
##--------------------------------------------------------------------------------------------------
if [[ "${BASH_SOURCE[0]}" = "$0" ]]; then
setup && execute && finish
fi
Das Script wird anschließend ausführbar gemacht:
1
sudo chmod +x /usr/local/bin/idoit
sudo
Das Script erlangt automatisch die richtigen Rechte durch den Einsatz von sudo.
Dem derzeit angemeldeten User muss daher das Ausführen von sudo erlaubt sein. Unter Debian GNU/Linux 9 wird der User der Gruppe sudo zugewiesen. Dazu sind root-Rechte erforderlich:
1
usermod -aG sudo "$(whoami)"
Unter SLES ist die Option Defaults targetpw gesetzt, die diesen Mechanismus verhindert. Daher muss diese Option in der Datei /etc/sudoers auskommentiert werden.
#!/bin/bash
##
## i-doit jobs
##
##
## Copyright (C) 2017-18 synetics GmbH, <https://i-doit.com/>
##
## This program is free software: you can redistribute it and/or modify
## it under the terms of the GNU Affero General Public License as published by
## the Free Software Foundation, either version 3 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU Affero General Public License for more details.
##
## You should have received a copy of the GNU Affero General Public License
## along with this program. If not, see <http://www.gnu.org/licenses/>.
##
set -euo pipefail
IFS=$'\n\t'
##
## Configuration
##
CONSOLE_BIN="/usr/local/bin/idoit"
INSTANCE_PATH="/var/www/html/i-doit"
APACHE_USER="www-data"
IDOIT_USERNAME="admin"
IDOIT_PASSWORD="admin"
TENANT_ID="1"
##--------------------------------------------------------------------------------------------------
function execute {
local prefix=""
local suffix="--user $IDOIT_USERNAME --password $IDOIT_PASSWORD --tenantId $TENANT_ID"
test "$(whoami)" != "$APACHE_USER" && prefix="sudo -u $APACHE_USER "
log "Archive i-doit logbook"
eval "${prefix}${CONSOLE_BIN} logbook-archive $suffix" || \
abort "Command 'logbook-archive' failed"
log ""
log "Cleanup i-doit rights"
eval "${prefix}${CONSOLE_BIN} auth-cleanup $suffix" || \
abort "Command 'auth-cleanup' failed"
log ""
log "Purge unfinished objects"
eval "${prefix}${CONSOLE_BIN} system-objectcleanup --objectStatus 1 $suffix" || \
abort "Command 'system-objectcleanup' failed"
log ""
log "Re-create search index"
eval "${prefix}${CONSOLE_BIN} search-index $suffix" || \
abort "Command 'search-index' failed"
log "Send notifications"
eval "${prefix}${CONSOLE_BIN} notifications-send $suffix" || \
abort "Command 'notifications-send' failed"
log "Clear caches"
eval "${prefix}rm -rf ${INSTANCE_PATH}/temp/*" || \
abort "Unable to clear caches"
log "Clear updates"
eval "${prefix}rm -rf ${INSTANCE_PATH}/updates/versions/*" || \
abort "Unable to clear updates"
}
function setup {
test -x "$CONSOLE_BIN" || \
abort "Script '${CONSOLE_BIN}' not found"
test -d "$INSTANCE_PATH" || \
abort "No i-doit instance found under '${INSTANCE_PATH}'"
}
function log {
echo -e "$1"
}
function finish {
log "Done. Have fun :-)"
exit 0
}
function abort {
echo -e "$1" 1>&2
echo "Operation failed. Please check what is wrong and try again." 1>&2
exit 1
}
##--------------------------------------------------------------------------------------------------
if [[ "${BASH_SOURCE[0]}" = "$0" ]]; then
setup && execute && finish
fi
Das Script wird anschließend ausführbar gemacht:
1
sudo chmod +x /usr/local/bin/idoit-jobs
Ab dann kann es von jedem User verwendet werden:
1
idoit-jobs
Wird das Script ausgeführt werden folgende Arbeiten erledigt:
Es empfiehlt sich, die oben genannten Jobs mindestens einmal pro Tag auszuführen. Es sollte sichergestellt sein, dass während der Ausführung keine weiteren Interaktionen in i-doit geschehen, sprich weder über die Web GUI, durch zusätzliche Scripte oder von externen Applikationen über die API. Daher werden die Jobs meist nachts ausgeführt.
Die in diesem Artikel genannten Scripte funktionieren nicht ohne weiteres unter Windows und sollten durch äquivalente Scripte ersetzt werden. Für die Automatisierung eignen sich Windows Tasks.
Damit ggf. Fehler abgefangen und an den zuständigen Systemadministrator gemeldet werden, kann man das Betriebssystem so konfigurieren, dass E-Mails verschickt werden. Ein simpler Mailer ist sSMTP. Das Script idoit-jobs produziert allerdings eine Menge Ausgaben auf der Shell. Damit nur Fehler gemeldet werden, kann man das Tool chronic einsetzen, das sich unter vielen Betriebssystemen nachinstallieren lässt. Meist ist es im Distributionspaket moreutils enthalten.
chronic unter SLES
Das Paket moreutils und somit das Tool chronic sind kein Bestandteil von SLES. Daher muss chronic manuell von der Website heruntergeladen werden:
## i-doit cron jobs
MAILTO="sysadmin@i-doit.example.net"
5 5 * * * www-data test -x /usr/local/bin/idoit-jobs && /usr/bin/chronic /usr/local/bin/idoit-jobs
Jeden Tag um 5:05 Uhr wird mit den Rechten des Apache Users www-data das Script idoit-jobs ausgeführt. Damit nur Fehler per Mail gesendet werden, kommt chronic zum Einsatz. Fehler werden per Mail versendet.