Bagaimana menjalankan skrip bash sebagai root pada startup?

0

Saya mengalami beberapa masalah dengan ini, saya memiliki skrip yang seharusnya memulai airodump-ng saat boot tetapi biasanya hanya menjalankan bagian pertama dari skrip dan hanya itu.

Saya telah mencoba membuat file layanan systemd dan mengaktifkannya tetapi skrip tidak berjalan sebagai root.

Saya mencoba ini di kedua lengkungan linux dan debian tetapi dalam debian saya pergi rute skrip init tetapi masih skrip tidak akan berjalan sebagai root.

Skrip saya:

!#/bin/bash
ifconfig wlan0 down
sleep 5
airmon-ng start wlan0
sleep 5
airodump-ng mon0

exit 0

File layanan:

[Unit]
Description=auto start airmon

[Service]
ExecStart=~/scripts/cap.sh
Type=oneshot
User=root


[Install]
WantedBy=multi-user.target

Sunting * Ini adalah output dari status systemctl:

ap.service - auto start airmon
Loaded: error (Reason: Invalid argument)
Active: inactive (dead)

Jan 13 13:03:44 alarmpi systemd[1]: [/etc/systemd/system/cap.service:5] Executable   path is not absolute, ignoring: ~/scripts/cap.sh
Jan 13 13:03:44 alarmpi systemd[1]: cap.service lacks ExecStart setting. Refusing.
Jan 13 13:47:08 alarmpi systemd[1]: [/etc/systemd/system/cap.service:5] Executable path is not absolute, ignoring: ~/scripts/cap.sh
Jan 13 13:47:08 alarmpi systemd[1]: cap.service lacks ExecStart setting. Refusing.
Skilo Skilo
sumber
2
Saya pikir masalah Anda adalah bahwa Anda menjalankan perintah yang mungkin tidak selalu berakhir, jadi Anda mungkin perlu memotongnya ke belakang dengan menambahkan & di akhir baris (bukan pada sleep yang tentu saja).
nerdwaller
Tetapi ketika saya menjalankan skrip sebagai root di terminal semuanya bekerja dengan baik.
Skilo Skilo
2
Untuk hasil terbaik, letakkan file layanan dan output dari systemctl status $YOURSERVICE (apa pun layanan itu) dalam pertanyaan Anda. Dan periksa apakah Anda mengetik skrip itu dengan benar. Orang akan langsung melompat pada satu kesalahan yang cukup jelas yang mungkin hanya kesalahan pengetikan Anda di sini.
JdeBP
Jadi saya mengubah lokasi skrip dan sekarang tampaknya berfungsi, saya kira systemd tidak suka direktori home.
Skilo Skilo
Apa yang Anda gunakan, Debian atau Arch? Apakah Anda menggunakan systemd?
Braiam

Jawaban:

2

Jurnal itu sebenarnya memberi tahu Anda mengapa layanan Anda tidak akan dimulai.

Apa yang dikatakannya adalah bahwa unit layanan bukan skrip shell. Anda tidak mendapatkan, terlepas dari beberapa sangat barang-barang khusus, hal-hal seperti ~ variabel ekspansi atau lingkungan dalam unit layanan. Nama yang Anda lewati ExecStart harus jalan biasa, absolut, dari program untuk dijalankan. Nama Anda ~/system/cap.sh, yang merupakan (tentu saja) jalur relatif bukan jalur absolut. Ini bukan shell. ~ bukan metacharacter. Ini adalah karakter biasa, menunjukkan beberapa subdirektori yang diklaim dari direktori saat ini bernama ~.

systemd menolak untuk menerima ExecStart dengan pathname relatif. Dan itu menolak, jelas cukup, untuk memulai layanan yang tidak memiliki yang valid ExecStart yang menjelaskan bagaimana layanan dimulai.

Setelah memperbaikinya, Anda kemudian perlu memperbaiki skrip Anda sehingga sebenarnya skrip yang dapat dieksekusi dengan benar. Perlu memiliki izin menjalankan dan memiliki #! dieja dengan benar pada baris pertama. Juga perhatikan bahwa tidak ada yang memerlukan shell Bourne Again, dan itu ide yang baik untuk diikuti Keunggulan Debian dalam menggunakan Almquist daripada shell Bourne Again dalam skrip dijalankan sebagai bagian dari sistem bootstrap .

Anda mungkin ingin men-tweak file layanan Anda sehingga tidak mengutak-atik antarmuka jaringan secara paralel dengan sistem yang menginisialisasi mereka di tempat pertama. Apa artinya itu khusus untuk sistem Anda , jadi Anda harus mencari tahu apa yang harus dimasukkan sebagai After= dalam file unit Anda.

JdeBP
sumber