Bagaimana saya bisa menjalankan skrip saat startup di Ubuntu Server 17.10?


13

Bagaimana saya bisa menjalankan skrip saat startup di mesin Ubuntu Server 17.10? Saya pikir metode ini diubah pada 17.10.

Jawaban:


14

Letakkan skrip di crontabel pengguna yang sesuai (yaitu crontab ) dengan jadwal @reboot.

Seorang pengguna dapat mengedit crontabelnya dengan crontab -e.

Contoh yang akan berjalan /path/to/script.shsaat startup:

@reboot /path/to/script.sh

Jika Anda perlu menjalankannya sebagai root, jangan gunakan @reboot sudo /path/to/script.sh;
gunakan sudo crontab -eu rootuntuk mengedit crontab root.

Lihat juga: crontab (1), cron (8), crontab (8)


2

Ubuntu 15.04 dan maju secara default menggunakan sesuatu yang disebut systemd, yang merupakan program (semacam) yang mengotomatiskan layanan dan prosedur startup. Anda dapat membuatnya sendiri dan menambahkannya ke daftar layanan startup hanya dengan sedikit usaha.

Layanan Systemd Dasar

Ini adalah .servicefile barebones yang dapat digunakan untuk meluncurkan server python gui saya (bisa jadi skrip shell, tidak masalah):

[Unit]
Description=Python GUI Server

[Service]
ExecStart=/home/pi/software/GUI_POE.py &

[Install]
WantedBy=multi-user.target

The Descriptionpilihan adalah string yang menggambarkan apa layanan ini atau tidak.

The ExecStartpilihan menentukan perintah untuk mengeksekusi. Di sini, saya memberikan path ke skrip python yang dapat dieksekusi dan menggunakan &token untuk menjalankannya di latar belakang.

The WantedBypilihan menspesifikasikan diutamakan, berdasarkan apa target yang ingin menggunakan layanan ini. Jika Anda tidak membutuhkan layanan Anda untuk dijalankan pada waktu yang sangat spesifik, maka setel ke multi-user.target.

Prosedur Dasar

  1. Tulis skrip yang ingin Anda jalankan saat startup menggunakan nanoatau editor pilihan Anda. Pastikan Anda menyertakan shebang yang tepat di bagian paling atas file ( #!/bin/bashuntuk skrip bash), dan berikan izin yang dapat dieksekusi dengannya chmod.

  2. Cukup tulis layanan Anda dalam file bernama my_service.service, lalu salin ke directoy yang tepat dengannya cp my_service.service /lib/systemd/system/.

  3. Mulai layanan Anda: sudo systemctl start my_service.service. Ini meluncurkan skrip apa pun yang Anda minta layanan Anda jalankan. Perintah yang sama dengan "stop" bukannya start akan mematikannya.

  4. Menambahkan layanan Anda untuk proses start-up: sudo systemctl enable my_service.service. Untuk menghapusnya, cukup ganti "aktifkan" dengan "nonaktifkan" pada perintah yang sama.

Dan itu dia! Perlu diingat bahwa skrip Anda akan secara otomatis dijalankan dengan izin root, karena itu default di layanan systemd.

Contoh Sederhana Saya (Penuh)

Untuk referensi, inilah layanan systemd sederhana yang saya miliki yang meluncurkan Server GUI Python sederhana menggunakan Dash:

[Unit]
Description=Python GUI Server
After=network-online.target

[Service]
Type=simple
WorkingDirectory=/home/pi/software
ExecStart=/home/pi/software/GUI_POE.py &
Restart=always
RestartSec=15s
KillMode=process
TimeoutSec=infinity
User=pi
Group=pi

[Install]
WantedBy=multi-user.target

Layanan contoh ini menggunakan skrip Python3 tetapi rumusnya sama persis dengan skrip shell.

Bacaan lebih lanjut dapat ditemukan di tutorial yang sangat baik dari DigitalOcean ini, dan utas AskUbuntu ini dengan jawaban yang sangat bagus yang membantu saya mempelajari systemd. Semoga ini membantu!


2
Terima kasih telah membawa perspektif systemd ke pertanyaan ini! Saya akan menunjukkan bahwa tidak ada kebutuhan nyata untuk memaksa latar belakang di garis ExecStart.
Jeff Schaller
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.