Strona 1 z 1

[+] Skrypt w /etc/init.d/ nie znajduje /bin/bash czy /bin/sh

: 25 lutego 2011, 03:48
autor: starach
Cześć.

Napisałem sobie skrypt do uruchamiania mojego serwera Ventrilo. Napisałem go w notatniku w Windowsie - co samo w sobie może być już zapewne przyczyną błędu - po czym przekopiowałem na serwer. Niestety przy próbie uruchomienia wyskakuje błąd:

Kod: Zaznacz cały

root@debian:/> /etc/init.d/ventrilo.sh status
-bash: /etc/init.d/ventrilo.sh: /bin/sh^M: bad interpreter: No such file or directory

Kod: Zaznacz cały

#! /bin/sh

### BEGIN INIT INFO
# Provides:		ventrilo
# Required-Start:	
# Required-Stop:	
# Default-Start:	2 3 4 5
# Default-Stop:		
# Short-Description:	Ventrilo voice comunication server
### END INIT INFO

VENPATH=/home/ventrilo
VENBIN=$VENPATH/ventrilo_srv

case "$1" in
  start)
	if [ ! -f $VENTBIN.pid ]
	then
	  su ventrilo -c "$VENBIN -f$VENPATH/ventrilo_srv/3784 -d"
	  renice -5 `cat $VENPATH/ventrilo_srv.pid`
	else
	  echo "[VT] Ventrilo server already running."
	fi
	;;
  stop)
	if [ ! -f $VENTBIN.pid ]
	then
	  echo "[VT] Ventrilo server isn't running."
	else
	  echo "[VT] Stopping Ventrilo server."
	  kill `cat $VENTBIN.pid`
	fi
	;;
  status)
	if [ ! -f $VENTBIN.pid ]
	then
	  echo "[VT] Ventrilo server isn't running."
	else
	  cat $VENTBIN.pid
	fi
	;;
  *)
	echo "Usage: /etc/init.d/ventrilo {start|stop|status}"
	exit 1
esac

exit 0
Jeśli zamienię

Kod: Zaznacz cały

#! /bin/sh
#na
#!/bin/sh
#lub 
#!/bin/bash
też niestety nie chce działać.

: 25 lutego 2011, 08:09
autor: NeoN265
Strzelam w złe kodowanie.

Kod: Zaznacz cały

-bash: /etc/init.d/ventrilo.sh: /bin/sh^M: bad interpreter: No such file or directory
Jak widać, źle czyta znak nowej linii (^M). Będziesz musiał zapisać plik w innym kodowaniu. Najprościej będzie edytować ten plik pod Linuksem.

: 25 lutego 2011, 08:11
autor: ksysinek
Przyczyną twojego problemu zapewne są znaki końca linii w skrypcie. Te które generuje Windowsowy notatnik przez Linuksa odczytywane są jako ^M. Dlatego system nie może znaleźć basha bo szuka go w /bin/bash^M. Powinien Ci to zasugerować komunikat:

Kod: Zaznacz cały

-bash: /etc/init.d/ventrilo.sh: /bin/sh[B]^M[/B]: bad interpreter: No such file or directory
Otwórz swój skrypt np. w mcedit i pousuwaj znaki z końca linii. Będą podświetlone na czarno.

Edycja:
Eh, spóźniłem się.

: 25 lutego 2011, 09:07
autor: Unit

Kod: Zaznacz cały

apt-get install dos2unix

Kod: Zaznacz cały

dos2unix /etc/init.d/ventrilo.sh 
Powinno zadziałać

: 25 lutego 2011, 10:06
autor: LordRuthwen

: 27 lutego 2011, 08:38
autor: starach
Dziękuję Unit, pomogło. Twoja metoda LordRuthwen, niestety nie zadziałała. Sprawdziłem hexdumpem i nie było tych trzech kolejnych wpisów.

Problem rozwiązany dziękuję.

: 28 lutego 2011, 08:52
autor: VMLine
Nadmienię iż standardy nakazują napisać łącznie

Kod: Zaznacz cały

#!/bin/sh
(bez spacji).
Pozdrawiam.