Saya memiliki instans AWS EC2 di mana saya ingin menjalankan pekerjaan dengan waktu tak terbatas. Namun, saya tidak ingin harus SSH ke instance saya untuk menjalankan perintah.
Saya pada dasarnya perlu menjalankan skrip python, yang melakukan pekerjaan tanpa batas waktu, jadi saya ingin menjalankan python3 script.py dari instance EC2 saya sedemikian rupa sehingga saya dapat melakukannya dari jarak jauh, dan selama saya contoh sedang menjalankan skrip script.py sedang berjalan.
Agar lebih jelas, jika saya menjalankan perintah seperti Sudo service httpd start saya tidak harus tetap menggunakan SSH ke instance saya untuk mengetahui bahwa lalu lintas sedang dilayani. Demikian pula, saya ingin menjalankan perintah sehingga meskipun saya memutuskan koneksi SSH saya ke instance, script.py masih berjalan.
Solusi yang saya pikirkan adalah membuat mesin lokal terhubung secara eksplisit ke instance dan menjalankan perintah dalam infinite loop, tetapi saya ingin menghindari ini.
Pertanyaan selanjutnya adalah apakah ada cara untuk menskalakan ke beberapa instance melakukan pekerjaan yang sama ini.
Saya juga telah mencoba mengedit rc.local di direktori etc, tetapi saya memastikan bahwa pekerjaan tersebut tidak berjalan.

1
user100123122 9 Januari 2021, 03:38

3 jawaban

Jawaban Terbaik

Umumnya untuk mengotomatisasi aplikasi Anda sepenuhnya sehingga skala ke instance baru dan memulai ulang setelah instance start/stop/reboot, Anda harus membuat unit sistem khusus. File unit akan bertanggung jawab untuk menjalankan skrip Anda dan memulainya secara otomatis saat diperlukan.

Untuk membuat semuanya otomatis sepenuhnya, Anda harus menyiapkan skrip dan file unit di data pengguna, sebaiknya di template peluncuran yang dapat menjadi dasar untuk Anda grup penskalaan otomatis.

2
Marcin 9 Januari 2021, 01:15

Pertanyaan Anda tidak benar-benar terkait dengan python atau aws, ini lebih merupakan pertanyaan Linux. Dengan mengatakan itu, ada banyak pilihan untuk mencapai apa yang Anda inginkan.

Jika Anda hanya ingin menjalankan program yang tetap berjalan (terus berjalan) setelah Anda keluar dari sistem, Anda dapat menggunakan bg + disown.

Sebagai contoh:

$ python script.py
ctrl-z
$ bg
$ disown -h
$ exit 

Anda memulai perintah Anda seperti biasa, tekan ctrl-z pada keyboard Anda yang menangguhkan tugas itu.

Selanjutnya Anda memanggil bg yang mengalihkan tugas terakhir yang ditangguhkan untuk dijalankan di latar belakang.

Setelah Anda menjalankan disown -h, ini menghapus proses dari kontrol shell saat ini (yang akan memungkinkannya bertahan setelah Anda keluar dari ssh).

Terakhir, Anda dapat keluar dari ssh dengan aman dan proses Anda akan terus berjalan tanpa batas.

Ada sejumlah opsi lain yang dapat Anda gunakan tetapi ini salah satu yang termudah.

1
Grizzle 9 Januari 2021, 01:18

Jika saya memahami pertanyaan Anda dengan benar, Anda meminta cara untuk memulai skrip pada instans EC2, dan membuatnya tetap berjalan setelah Anda mengakhiri koneksi SSH Anda.

Anda dapat menggunakan tmux untuk ini. Ketik tmux new untuk memulai sesi tmux baru, lalu jalankan skrip apa pun yang Anda coba jalankan. Kemudian tekan Ctrl+B, lalu tekan D. Ini akan memutuskan Anda dari sesi tmux Anda, tetapi sesi tmux akan tetap menjalankan skrip Anda. Sekarang Anda dapat dengan aman menutup koneksi SSH Anda, dengan skrip Anda masih berjalan. Jika Anda ingin mengakses terminal yang menjalankan skrip lagi, Anda dapat mengetik tmux a ke konsol Anda, dan itu akan mengembalikan sesi yang menjalankan skrip.

Atau, Anda dapat menggunakan screen, meskipun saya akan menggunakan tmux untuk tugas ini .

0
Gbox4 9 Januari 2021, 00:58