Salut à tous !
J'ai beau essayer d'avoir de l'aide sur d'autres forums, ça n'avance pas trop alors tous mes espoirs sont portés sur vous !
Pour faire court, j'ai des serveurs de jeux sur un dédié sous Debian 7, lorsqu'ils se lancent ils écrivent leur PID dans un fichier server.pid. Des fois ces serveurs freezent ou leur PID change (auto reload je pense) du coup quand je veux les stopper via l'API du jeu en PHP ça ne marche pas.
J'ai voulu créer un script, exécuté par PHP, pour les redémarrer peu importe s'ils fonctionnent normalement, s'ils freezent ou si leur PID change.
Problème : Pour trouver leur nouveau PID, j'utilise la commande lsof avec le port du serveur, mais depuis PHP celle ci n'est pas exécutée. Alors que via shell ça fonctionne très bien.
- Quand je rajoute sudo dans le exec de PHP j'ai cette erreur : sudo: no tty present and no askpass program specified
- Quand je rajoute dans etc/sudoers ces lignes :
ça ne change rien. Même quand je fais www-data ALL=(ALL) NOPASSWD: ALL, il s'en bas les c*******.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 www-data ALL=(ALL) NOPASSWD: SERVRES Cmnd_Alias SERVRES = /***/***/***/server.sh
Le script (oui c'est sans doute pas très bien codé c'est mon premier script) ::
L'exec PHP :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154 #!/bin/bash #Author : Simon B. alias Themiller #============= INFOS ============= PORT_NUMBER="$2" NAME="$1" LOGS=/home/www/sites/clients/client1/web3/web/servers/$NAME/output.txt PIDFILE=/home/www/sites/clients/client1/web3/web/servers/$NAME/server.pid SDEDI=/home/www/sites/clients/client1/web3/web/servers/$NAME/server #============= FUNCTIONS ============= function test_port() { if /usr/bin/lsof -Pi :${PORT_NUMBER} -sTCP:LISTEN -t >/dev/null ; then PID="$(/usr/bin/lsof -Pi :${PORT_NUMBER} -sTCP:LISTEN -t)" return 0 else return 1 fi } function my_date { date "+%d/%m/%y %H:%M:%S" } #============= SCRIPT ============= # DEMARRAGE DU SERVEUR case "$3" in start) if test_port; then echo "[$(my_date)] Server already online." >> ${LOGS} echo "Error : Server already online." else echo "[$(my_date)] Starting Server: "$NAME >> ${LOGS} echo "Starting your server." $SDEDI start echo "[$(my_date)] Server started: "$NAME >> ${LOGS} echo "Server started succefully !" fi ;; # ARRET DU SERVEUR stop) echo "Stopping Server..." echo "[$(my_date)] Stopping Server..." >> ${LOGS} # ON KILL VIA LE FICHIER PID echo "Killing daemon with PID..." echo "[$(my_date)] Killing daemon with PID..." >> ${LOGS} kill `cat $PIDFILE` rm $PIDFILE if test_port; then kill -9 ${PID} sleep 2 if test_port; then echo "[$(my_date)] ERROR !!!" else echo "Server stopped !" echo "[$(my_date)] Process killed to stop server." >> ${LOGS} fi else echo "Server stopped !" echo "[$(my_date)] Server stopped." >> ${LOGS} fi ;; # REDEMARRAGE restart) if test_port; then echo "Restarting Server..." echo "[$(my_date)] Restarting Server..." >> ${LOGS} # ON KILL VIA LE FICHIER PID echo "Killing daemon with PID..." echo "[$(my_date)] Killing daemon with PID..." >> ${LOGS} kill `cat $PIDFILE` rm $PIDFILE if test_port; then kill -9 ${PID} sleep 2 if test_port; then echo "[$(my_date)] ERROR !!!" >> ${LOGS} else echo "[$(my_date)] Process killed !" >> ${LOGS} sleep 5 $SDEDI start sleep 5 echo "Server restarted !" echo "[$(my_date)] Server restarted." >> ${LOGS} fi else echo "[$(my_date)] Server stopped and going to restart..." >> ${LOGS} sleep 5 $SDEDI start sleep 5 echo "Server restarted !" echo "[$(my_date)] Server restarted." >> ${LOGS} fi else $SDEDI start sleep 5 echo "Server restarted !" echo "[$(my_date)] Server restarted." >> ${LOGS} fi ;; # STATUS status) if test_port; then echo "Server is running ! PID : ${PID}" else echo "[$(my_date)] Server is not running" fi ;; *) echo "Usage: "$3" {start|stop|restart|status}" exit 1 esac exit 0
Merci d'avance pour tous ceux qui pourront m'aider car là je sèche !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 [...] $dossier = $row->folder; $port = $row->tm_port; $serv_path_dir = 'PATH_TO_FILE/server.sh'; $command = $serv_path_dir.' '.$dossier.' '.$port.' restart'; exec($command, $output); [...]
Partager