Bagaimana cara menggunakan crontab untuk memulai sesi layar?

12

Saya ingin membuat entri crontab sehingga mulai layar, memulai server permainan dan melepaskan. Ini untuk berjaga-jaga seandainya server reboot dan saya ingin memulai ini untuk saya secara otomatis.

0 0 0 0 0 (perintah)

harus dijalankan saat startup.

Ini menjalankan file shell yang terletak di ~ / cube / server.sh

Pemenang
sumber
Apakah Anda pengguna di mesin ini, atau apakah Anda memiliki akses ke skrip init?
Corey S.
2
Silakan lihat Manajemen Proses .
Dijeda sampai pemberitahuan lebih lanjut.
@ Dennis: Ya, saya suka itu. Tetapi kami tidak dapat menganggap server permainan yang ia jalankan tidak memiliki semacam konsol yang perlu diakses (yaitu selalu berjalan di latar depan). Kalau begitu mengapa dia repot dengan layar? Kecuali tentu saja, dia tidak menyadari masalah latar belakang dan latar belakang.
Corey S.
Saya adalah pengguna di mesin ini.
Victor

Jawaban:

15

Sesuatu seperti ini seharusnya bekerja. Contoh ini memunculkan layar dan menjalankan "atas":

screen -d -m top

Di crontab Anda, seperti yang ditunjukkan, Anda ingin melakukan sesuatu seperti ini:

@reboot /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver

Tentu saja, jika server game membutuhkan set lingkungan "normal", Anda bisa lebih dekat dengan:

@reboot (. ~/.profile; /usr/bin/screen -dmS gameserver-screen /opt/mycoolgame/bin/gameserver)
Corey S.
sumber
1
apa yang dilakukan . ~/.profilebagian itu?
Victor
Itu secara paksa mengatur lingkungan untuk entri cron. Tanpa itu, Anda hanya mendapatkan pasangan entri yang sangat spesifik. (Lihat man crontab untuk detailnya)
Corey S.
Saya memiliki file .sh yang mengeksekusi server game, jadi apakah ini akan berhasil? @reboot (. ~/cube; /usr/bin/screen -dmS gameserver-screen ./server.sh)
Victor
Itu mungkin cara terbaik untuk melakukannya. Jika berhasil, Anda mungkin tidak perlu khawatir tentang profil, tetapi jika Anda membutuhkan $ PATH lengkap, dll, Anda selalu dapat sumber dalam profil. Dari script server.sh.
Corey S.
5

Ini harus cukup ... jalankan

$ crontab -e

Lalu masukkan:

@reboot screen -dmS Victor
atx
sumber
Bisakah Anda mencoba dan menjelaskan bagaimana perintah 'Victor' ini terkait dengan menjalankan skrip - misalnya skrip yang ditanyakan OP?
Patrick
1
-S hanya untuk nama sesi
atx
4

Demi kelengkapan saja, dimungkinkan juga untuk menggunakan tmux untuk tujuan alih-alih screen(lihat tautan ini untuk perbandingan):

@reboot tmux new-session -d -s yourNameOfTheSession "your command to run"
Petr Pudlák
sumber
0

Saya memiliki situasi yang serupa, tetapi karena pembatasan tidak masuk akal lainnya, saya tidak dapat menggunakan crontab. Saya sebenarnya punya layar panggilan inittab. (mengganti beberapa nama untuk mengaburkan informasi):

XXX:5:respawn:/bin/su - useraccount -c "screen -D -m -c /home/xxxxxx/file.screenrc"

Di 'file.screenrc' adalah tempat saya mengatur beberapa opsi:

sessionname obscuresessionname
multiuser on
cd
screen /home/xxxxxxx/programtostart

Dengan cara ini mulai saat boot, dan jika program mati atau layar ditutup itu akan muncul kembali. Ini mungkin tidak dianggap konvensional, tetapi saya harus mengerjakan beberapa persyaratan lingkungan yang aneh. Jika kami harus menghapusnya, kami harus mengomentari kalimat itu, dan membunuh sesi. Kemudian ketika siap untuk membawanya kembali, tanda komentar, dan init q.

mangloide
sumber