skrip init.d tidak berjalan saat startup

15

Saya hosting beberapa server game Counter-Strike di server khusus saya menggunakan layar. Saya memiliki skrip ini yang saya jalankan ketika saya ingin memulai / menghentikan server:

#! /bin/sh
# /etc/init.d/css-server
#

case "$1" in
  start)
    echo "Starting Nullus Imprimis war server..."
    screen -A -m -d -S css-war-server /home/css-servers/war-server/css/srcds_run -game cstrike +map de_dust2 +maxplayers 16 -autoupdate -port 2555 -tick 100 
    echo "Nullus Imprimis war server started"
    echo "Starting Nullus Imprimis pub server #1..."
    screen -A -m -d -S css-pub-server-1 /home/css-servers/pub-server-1/css/srcds_run -game cstrike +map de_dust2 +maxplayers 32 -autoupdate -port 2666 -tickrate 100
    echo "Nullus Imprimis pub server #1 started"
    ;;
  stop)
    echo "Stopping Nullus Imprimis war server..."
    screen -S css-war-server -X quit
    echo "Nullus Imprimis war server stopped"
    echo "Stopping Nullus Imprimis pub server #1..."
    screen -S css-pub-server-1 -X quit
    echo "Nullus Imprimis pub server #1 stopped"
    ;;
  *)
    echo "Usage: /etc/init.d/css-servers {start|stop}"
    exit 1
    ;;
esac

exit 0

Saya memasukkan skrip ini (dipanggil css-servers) /etc/init.d/dan sepengetahuan saya itu berarti skrip itu dijalankan ketika sistem dinyalakan. Namun ketika saya memeriksa layar aktif menggunakan screen -lstidak ada yang berjalan.

Bagaimana saya bisa menjalankan ini pada startup di Ubuntu Server?

Mark Twaign
sumber

Jawaban:

33

Hanya dengan menghadirkan skrip /etc/init.dtidak cukup untuk menjalankannya saat startup.

Untuk menambahkannya ke startup Anda, Anda harus memberi tahu Ubuntu tentang hal itu:

sudo update-rc.d css-servers defaults

Kemudian harus dimulai pada boot berikutnya, jika skrip diformat dengan benar, bit set yang dapat dieksekusi, dll. Paket yang Anda instal dari apt-get/ Pusat Perangkat Lunak menjalankan perintah ini atau yang setara untuk Anda secara otomatis, itulah sebabnya Anda biasanya tidak perlu khawatir tentang itu.

Jika Anda ingin segera memulainya, Anda dapat memanggilnya langsung:

sudo service css-servers start
Michael Hampton
sumber
Ini sangat aneh. Sampai saat ini skrip saya berjalan saat startup tanpa update-rc.dperintah ini . Saya memperbarui skrip saya kemudian tidak berjalan lagi sampai saya menjalankan perintah ini. Terima kasih. Ngomong-ngomong, bagaimana kita bisa "membatalkan pendaftaran" dari menjalankannya pada saat startup (seperti yang kita lakukan dengan update-rc.d)?
Nikos
1
@ Nik-Lz T&J ini merujuk pada Ubuntu versi lama dan usang yang digunakan pemula. Seharusnya tidak lagi digunakan, sebaliknya systemd saat ini (yang menggunakan sistem layanan yang sama sekali berbeda) harus digunakan.
Michael Hampton
7

Anda telah menyelesaikan bagian pertama. /etc/init.dadalah tempat skrip inisialisasi dijalankan. Namun, mereka tidak berjalan secara otomatis.

Mereka dijalankan secara berurutan sebagaimana ditentukan oleh tautan simbolik /etc/rc*.ddirektori. Setiap level run memiliki direktori sendiri. Skrip dengan nama tautan dimulai dengan Kdijalankan dengan penghenti pararmeter, dan skrip dengan nama dimulai dengan Sdijalankan dengan parameter awal. Dengan konvensi, nama file dimulai dengan Katau Sdiikuti oleh nomor dua digit yang digunakan untuk mengurutkan, dan diakhiri dengan nama skrip /etc/init.d.

Tautan dapat dibuat secara manual, tetapi umumnya dibuat dengan skrip. Skrip generik update-rc.dtersedia di Ubuntu. Perintah itu man update-rc.dakan memberi Anda dokumentasi tentang siapa yang akan menggunakannya. Dalam kasus Anda, coba:

sudo update-rc.d css-servers defaults

Untuk memulainya menggunakan skrip init coba:

sudo /etc/init.d/css-servers start

Saya biasanya memulai dan menghentikan server dengan cara ini untuk memastikan skrip berfungsi seperti yang diinginkan. Lalu saya jalankan update-rc.duntuk menambahkannya ke /etc/rc.ddirektori runlevel.

BillThor
sumber
1

Jika Anda tidak mendapatkan petunjuk mengapa layanan Anda tidak memulai saat boot. Namun, itu berfungsi dengan baik ketika Anda mencoba untuk memulai layanan secara manual service <your service> start. Dalam hal ini, cobalah mengarahkan ulang output standar dan output kesalahan ke beberapa file. Yang mungkin memberi Anda beberapa petunjuk mengapa tidak memulai saat mem-boot sistem.

misalnya di dalam skrip Anda

case "$1" in
  start)
    echo "Starting Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  stop)
    echo "Stopping Service "
    <your command to start the service > /tmp/bootservice.log 2>&1
    ;;
  *)
    echo "Usage: /etc/init.d/test {start|stop}"
    exit 1
    ;;
esac

exit 0
Pandurang Patil
sumber