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

Potrzebujesz pomocy z C, C++, perl, python, itp.
starach
Beginner
Posty: 134
Rejestracja: 08 grudnia 2010, 15:53

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

Post 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ć.
NeoN265
Posty: 43
Rejestracja: 16 października 2007, 16:37
Lokalizacja: Bytom

Post 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.
ksysinek
Beginner
Posty: 155
Rejestracja: 14 czerwca 2007, 00:33
Lokalizacja: *Miasto know-how

Post 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ę.
Awatar użytkownika
Unit
Beginner
Posty: 356
Rejestracja: 27 marca 2007, 09:39

Post autor: Unit »

Kod: Zaznacz cały

apt-get install dos2unix

Kod: Zaznacz cały

dos2unix /etc/init.d/ventrilo.sh 
Powinno zadziałać
Awatar użytkownika
LordRuthwen
Moderator
Posty: 2324
Rejestracja: 18 września 2009, 21:45
Lokalizacja: klikash?

Post autor: LordRuthwen »

starach
Beginner
Posty: 134
Rejestracja: 08 grudnia 2010, 15:53

Post 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ę.
Awatar użytkownika
VMLine
Beginner
Posty: 137
Rejestracja: 28 lutego 2011, 08:44
Lokalizacja: Poznań / Słupsk

Post autor: VMLine »

Nadmienię iż standardy nakazują napisać łącznie

Kod: Zaznacz cały

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