Mahlzeit,
folgenden Quellcode habe ich:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | #!/bin/bash function_call-ids() { # aktuelles Datum und Uhrzeit bestimmen date_now_id_[$1]=$(date +%Y-%m-%d_%H:%M:%S_%w) # aktuelles Datum und Uhrzeit in Variablen speichern date_seconds_[$1]=$(echo ${date_now_id_[${1}]} | cut -d"_" -f2 | cut -d":" -f3) date_minutes_[$1]=$(echo ${date_now_id_[${1}]} | cut -d"_" -f2 | cut -d":" -f2) date_hours_[$1]=$(echo ${date_now_id_[${1}]} | cut -d"_" -f2 | cut -d":" -f1 ) # durch Zeitverzögerungen muss bei den Sekunden minus 1 Sekunde gerechnet werden new_date_seconds_[$1]="$(( ${date_seconds_[${1}]}-1 ))" if [ "${#new_date_seconds_[${1}]}" = "1" ]; then date_seconds_[$1]="0$(( ${date_seconds_[${1}]}-1 ))" else date_seconds_[$1]="$(( ${date_seconds_[${1}]}-1 ))" fi # Datenbank auslesen - Zeitinformationen mysql_id_entry_[$1]=$(mysql -D 'user' -u 'admin' -p'password' -e "SELECT intervaltime FROM tblname WHERE ID='${1}'" | grep -v 'intervaltime') # Datenbank auslesen - Scriptname mysql_id_entry2_[$1]=$(mysql -D 'user' -u 'admin' -p'password' -e "SELECT scriptname FROM tblNAME WHERE ID='${1}'" | head -n2 | tail -n1) # Werte auslesen und in Variablen speichern date_entry_seconds_[$1]=$(echo ${mysql_id_entry_[${1}]} | cut -d" " -f1) date_entry_minutes_[$1]=$(echo ${mysql_id_entry_[${1}]} | cut -d" " -f2) date_entry_hours_[$1]=$(echo ${mysql_id_entry_[${1}]} | cut -d" " -f3) # Zugriffsvariablen sperren entry_check_seconds_[$1]="false"; entry_check_minutes_[$1]="false"; entry_check_hours_[$1]="false"; # wenn Variable "*" beinhalten, dann Zugriffsvariable freigeben if [ "${date_entry_seconds_[${1}]}" = "*" ]; then entry_check_seconds_[$1]="true"; fi if [ "${date_entry_minutes_[${1}]}" = "*" ]; then entry_check_minutes_[$1]="true"; fi if [ "${date_entry_hours_[${1}]}" = "*" ]; then entry_check_hours_[$1]="true"; fi # wenn erstes Zeichen in Variable "/" und Werte dahinter teilbar(mod), dann Zugriffsvariablen freigeben if [ "${date_entry_seconds_[${1}]:0:1}" = "/" ]; then if [ "$(( ${date_entry_seconds_[${1}]:1:2} % ${date_seconds_[${1}]} ))" = "0" ]; then entry_check_seconds_[$1]="true"; fi fi if [ "${date_entry_minutes_[${1}]:0:1}" = "/" ]; then if [ "$(( ${date_entry_minutes_[${1}]:1:2} % ${date_minutes_[${1}]} ))" = "0" ]; then entry_check_minutes_[$1]="true"; fi fi if [ "${date_entry_hours_[${1}]:0:1}" = "/" ]; then if [ "$(( ${date_entry_hours_[${1}]:1:2} % ${date_hours_[${1}]} ))" = "0" ]; then entry_check_hours_[$1]="true"; fi fi # String anhand von Delimiter trennen (falls vorhanden | falls nicht vorhanden nimmt er immer auch die Zahl) for seconds_parts in $(echo "${date_entry_seconds_[${1}]}" | tr "," "\n") do if [ "${seconds_parts}" = "${date_seconds_[${1}]}" ]; then entry_check_seconds_[$1]="true"; fi done for minutes_parts in $(echo "${date_entry_minutes_[${1}]}" | tr "," "\n") do if [ "${minutes_parts}" = "${date_minutes_[${1}]}" ]; then entry_check_minutes_[$1]="true"; fi done for hours_parts in $(echo "${date_entry_hours_[${1}]}" | tr "," "\n") do if [ "${hours_parts}" = "${date_hours_[${1}]}" ]; then entry_check_hours_[$1]="true"; fi done if [ "${entry_check_seconds_[${1}]}" = "true" -a "${entry_check_minutes_[${1}]}" = "true" -a "${entry_check_hours_[${1}]}" = "true" ]; then echo "${date_now_[${1}]}" >> test.txt echo "${mysql_id_entry2_[${1}]}" >> test.txt fi } ######################################################################################## function_check-status { function_call-ids 3 & function_call-ids 4 & function_call-ids 5 & function_call-ids 6 & function_call-ids 7 } ######################################################################################## (sleep 20 && function_check-status) & (sleep 40 && function_check-status) & (sleep 60 && function_check-status) |
Rufe ich jetzt die "function_call-ids 3" einzeln auf schreibt er mir bei richtig gesetzten Werten (z.B.: * * *) den erwarteten Output in die text.txt ... rufe ich das Konstrukt allerdings über den unteren Block (sleep 20 && function_check-status & ...) auf stimmt das ermittelte aktuelle Datum nicht mehr (ist dann Datum von gestern z.B.)...
Woher kommt das, obwohl die Variablen ja eindeutig sind ??
Ziel des Scriptes ist es übrigens nur noch einen cronjob im crontab zu haben, welches minutlich aufgerufen wird und in Verbindung mit PHP die Steuerung diverser Script (über id und dem hinterlegten Scriptname in DB) und dessen Überwachung zu steuern!
Vielleicht hat ja einer auch einen "cleveren" Ansatz für dieses Problem bzw. den Ansatz der Steuerung von cronjobs!!!