Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

1

16.03.2014, 11:27

Linux bash

Morgen,

ich habe eine Frage zu bash Scripten.
Mit einem Freund Spiele ich Running with Rifles, für das wir unseren eigenen Server aufgesetzt haben. Dieser lief gestern Abend auch schon reibungslos.
Dieser Server läuft auf Linux und wird über ein bash Script gestartet. Dabei sind vier Schritte wichtig:

1. Server Programm starten
2. Server starten (IM Server Progamm)
3. Config laden (mit php)
4. Nach 12 Stunden Server beenden und neustarten

So, nur 1 war kein Problem, das war im mitgeliefertem bash schon drin.
2 habe ich irgendwie tatsächlich hinbekommen. Aber ich bin mir nicht sicher ob das so zuverlässig ist...
Das Programm startet und läd dann eine eigene Eingabe in der ich Befehle schreiben kann. Dort muss auch "start_server" rein, jetzt weiß ich nur nicht ob ich das Programm so bedienen kann (also Eingaben weitergeben).
3 hat auch geklappt, denke mal das könnte so auch richtig sein.
Bei 4 bin ich mir garnicht sicher, vor allem ob es so schlau ist das bash Script wirklich 43200 Sekunden schlafen zu lassen :P

Ihr merkt schon ich hab davon eigentlich keine Ahnung.
Erstmal hier das Scirpt:

Quellcode

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
#!/bin/sh

cd "$(dirname "$(readlink -f "$0")")"
here="$(pwd)"

export LD_LIBRARY_PATH="$here/lib:$LD_LIBRARY_PATH"

echo "Starting invasion server"
exec ./launch_server "$@" &
sleep 5
expect "*"
send "start_server"
interact

echo "Loading config"
cd "$here/media/packages/vanilla/scripts"
exec php "gamemode_invasion.php" "$@" &

cd "$here"
sleep 12h
echo "Stopping server"
expect "*"
send "exit"
interact
sleep 10
echo "Restarting server"
exec ./launch_invasion "$@"


So also wo ich mir vor allem nicht sicher bin ist Nr. 2 und 4.
Zwischen den "sleep 5" seht ihr wie ich versuche das Kommando "start_server" an das Program zu geben während dieses läuft.

Geht das alles so, was muss ich ändern?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »DeKugelschieber« (16.03.2014, 12:30)


Legend

Alter Hase

Beiträge: 731

Beruf: Softwareentwickler

  • Private Nachricht senden

2

16.03.2014, 12:16

Statt des 43200 Sekunden langen Sleeps empfiehlt sich ein Cron-Job.
"Wir müssen uns auf unsere Kernkompetenzen konzentrieren!" - "Juhu, wir machen eine Farm auf!"

Netzwerkbibliothek von mir, C#, LGPL: https://sourceforge.net/projects/statetransmitt/

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

3

16.03.2014, 12:30

Hmm joa, ich teste es lieber erstmal so.

Habs noch mal deutlich angepasst: http://pastebin.com/ZAGYvNBa (oben im Beitrag auch)

Nur hier frage ich mich ob "expect" dann auf den richtigen Prozess zugreift wenn ich diesen mit "&" starte (falls das für "exec" überhaupt erlaubt ist).

DeKugelschieber

Community-Fossil

  • »DeKugelschieber« ist der Autor dieses Themas

Beiträge: 2 641

Wohnort: Rheda-Wiedenbrück

Beruf: Software-Entwickler

  • Private Nachricht senden

4

17.03.2014, 15:18

Pipes meine Freunde:

Quellcode

1
2
3
4
5
6
7
#!/bin/bash

clear
mkfifo input
./bash_test < input &
echo "Hi" > input
rm -f input


"bash_test" ist hier die Ausführbare (wartet auf Eingabe und beendet dann).

Danke für die Hilfe.

Werbeanzeige