Buat sesi Layar dengan skrip bash menggunakan contab

8

Saya ingin file .jar dijalankan setiap kali server melakukan boot (kami menggunakan VPS), jadi saya telah mengedit crontab menggunakan crontab -edan kemudian menambahkan @reboot bash /home/bash/startserver.sh. Tetapi saya bahkan belum sampai pada titik di mana script bekerja sama sekali.

Ini skrip saya:

#!/bin/bash
screen -S bukkit
cd $HOME/server
java -jar bukkit.jar

Alasan yang perlu saya gunakan screenadalah karena ketika saya memulai bukkit.jar, ia masuk ke konsol tempat saya dapat memasukkan lebih banyak perintah untuk program itu (saya yakin Anda semua akrab dengan Minecraft dan servernya di situs ini, meskipun , haha), tetapi saya harus dapat melakukan perintah lain sebagai root dan untuk program lain ketika sedang berjalan, dan bahkan menutup sesi Putty saya.

Satu-satunya masalah adalah ketika skrip ini dijalankan, ia membuat sesi layar, tetapi ID- nya tidak terdaftar screen -ls, karena ID-nya kosong. Sebaliknya, saya harus pergi /run/screen/S-rootuntuk mencari ID dan kemudian menggunakan yang khas screen -X -S $name quitdi atasnya.

Mungkin ini bahkan tidak mungkin, atau mungkin sebenarnya ada cara yang lebih sederhana untuk melakukan ini (saya akan suka lebih sederhana), tetapi saya tidak tahu mengapa ini tidak berhasil. Dan jika ini mungkin, apakah mungkin untuk bergabung kembali dengan sesi screen -S bukkitketika menjalankan skrip bash? (Beberapa pertanyaan, saya kira, tetapi terima kasih banyak atas bantuan Anda! (Kurung))

Jacob Larson
sumber

Jawaban:

15

Mulai layar dalam mode terlepas, dan jalankan perintah Anda di dalamnya:

screen -d -m -S bukkit bash -c 'cd $HOME/server && java -jar bukkit.jar'

Anda mungkin ingin membuat skrip khusus bukkit.sh:

#!/bin/bash -e
cd ~/server
java -jar bukkit.jar

Sehingga jika skrip menjadi lebih kompleks, Anda tidak perlu menulis antrean panjang screen, dan agar screenperintahnya tetap sama, cukup:

screen -d -m -S bukkit path/to/bukkit.sh
janos
sumber
1
Saya mencoba melakukan kedua opsi, satu dengan satu file lagi, dan satu dengan dua file terpisah, tetapi sekarang sesi layar tidak dibuat sama sekali. Saya sudah mencoba menjalankan perintah langsung dari baris perintah, tetapi itu tidak berhasil ..: /
Jacob Larson
Apakah Anda mendapatkan pesan kesalahan atau sesuatu? Pertama buat bukkit.shskrip bekerja pada baris perintah. Selanjutnya, periksa apakah itu screen -S bukkit path/to/bukkit.shberfungsi. Selanjutnya, periksa apakah itu screen -d -m -S bukkit path/to/bukkit.shberfungsi. Akhirnya, atur cron. Cobalah hal yang paling sederhana terlebih dahulu, dan ambil langkah-langkah kecil sehingga Anda mengerti langkah mana yang akan rusak. Katakan itu, dan pesan kesalahan yang Anda dapatkan jika Anda butuh bantuan.
janos
1

Anda harus update-rc.dsebagai berikut untuk mengaktifkan layanan saat boot:

# update-rc.d cron defaults
Maythux
sumber
@JacobLarson Anda dipersilakan .. Lebih baik untuk menandai sebagai jawaban dan membenarkan jika ini membantu Anda
Maythux