Terminal de sırasıyla kod çalıştırma

Başlatan emrengin, 01 Ağustos 2019 - 14:24:35

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

emrengin

Arkadaşlar merhaba
linux üzerinde açılışta terminalden çalıştırmak istediğim bir dosya yazmak istiyorum biraz daha açıyorum.
örnek veriyorum
sudo roscore
sudo systemctl start ardupilot
....

böyle bir kaç satırı bir not defteri gibi bir şeye kaydedip daha sonra bu dosyayı cihazı açtığımda otomatik olarak çalıştırılmasını nasıl sağlayabilirim ?

illedelinux

Bir boş not defterine alttakini yapıştırın, komut yazan yerlere gerekli komutları girin, sayıyı arttırabilirsiniz.
#!/bin/sh
sh -c "komt1 ; komt2 ; komut3"


Dosyanın adını örneğin start yapın.
Dosyaya sağ tıklayın, bütün izinleri verin.

Ardından alttakini boş bir not defterine yapıştırın, bunun adını da start2 yapın.
[Desktop Entry]
Type=Application
Name=start2
Exec=sh "~/.config/start"
Terminal=false
NoDisplay=true
X-GNOME-AutoRestart=true


start1 dosyasını ve ardından start dosyasını gerekli yerlere taşıyın.
cp /nerede/ise/start1  /etc/xdg/autostart
cp /nerede/ise/start  ~/.config/start

En son menüden "Başlangıç ve Seçenekler" yazılımını açın, start1 dosyasının yolunu göstererek ekleyin.

GNU/Linux kullanmıyorum, onu yaşıyorum...

emrengin

Verdiğiniz cevaplar için çok teşekkür ederiz fakat söyle bir sıkıtnıtımız var. Verilen komutları biz raspberry ve navio2 üzerinden yürütüyoruz ve arayüz bulunamamakta bazı adımlarınız arayüz gerektiriyor bu yüzden  o adımlarıda terminalden nasıl yapacağımız hakkında bilgi verebilirmisiniz.

mhmtkrktr

#3
Çalışacak komutlar yönetici (sudo) izni istemiyorsa, @illedelinux 'ün gösterdiği yoldan çalıştırabilirsin.
Fakat komutlar örneğini verdiğin şekilde sudo gereksinimi duyuyorsa, şifre isteği arkaplanda kalacağı için komutlar çalışmaz.

Bunu aşmanın birkaç yolu var ancak kafanı karıştırmamak adına en basit yöntemi paylaşayım. (systemd servisi oluşturmak)

(önceden bu iş için rc.local vardı fakat bazı dağıtımlar da sanırım kaldırıldı. Kullandığın dağıtım için hâlâ geçerli olabilir. Eğer sisteminde /etc/rc.local dosyası ve etkin bir rc.local servisi yoksa aşağıda ki yöntem bunun bir benzerini oluşturacaktır. Varsa orayı kullanabilirsin.)

Servis bölümü;

sudo nano -t /etc/systemd/system/mystartuprc.service
F2 > Kaydet ve çık
(KULLANICI_ADIN 'a dikkat et )

İçeriği şu şekilde düzenle,
Alıntı Yap[Unit]
Description=bu servis başlangıç betiğimi çalıştırır

[Service]
Type=oneshot
ExecStart=bash -c '/home/KULLANICI_ADIN/.mystartupscript &'
TimeoutSec=0
RemainAfterExit=yes
SysVStartPriority=99

[Install]
WantedBy=multi-user.target

Servisi etkinleştir
sudo systemctl enable mystartuprc.service


Betik bölümü;

Öncelikle bu tür işlerde kullanmak üzere bir ana betik oluştur.
nano -t ~/.mystartupscript
Açlan dosyanın içeriğini şu şekilde düzenle ve kaydet
Alıntı Yap#!/usr/bin/bash

Bu betiğe çalışma izni ver
chmod +x ~/.mystartupscript


Kullanımı;

Oluşturduğun bu mystartupscript 'i iki şekilde kullanabilirsin.
1: çalışmasını istediğin komutları doğrudan buraya yazarsın. Örn:
Alıntı Yap#!/usr/bin/bash
sudo roscore
sudo systemctl start ardupilot

2: Komutları başka dosyalara yazar, source komutuyla ana betiğe çekersin. (Bu tarz komutların çok olması ve karışmamasını istiyorsan)  Örn:

/home/KULLANICI_ADIN/betiklerim/ozel_komutlarim
Alıntı Yapsudo roscore
sudo systemctl start ardupilot

/home/KULLANICI_ADIN/.mystartupscript
Alıntı Yap#!/usr/bin/bash
source "/home/KULLANICI_ADIN/betiklerim/ozel_komutlarim"

source ettiğin her dosyanın içeriği, içerik sırasına göre bu ana betiğe aktarılıp çalıştırılacaktır.

Dikkat etmen gereken yerler;
/home/KULLANICI_ADIN bölümünü $HOME veya ~/ şeklinde yazmamaya dikkat et. Aksi durumda systemd için /root dizini geçerli olacaktır.

Uyarı: Bu başlığın konusu olmadığı için değinmeyeceğim fakat güvenlik düşünüldüğünde, script dosyasının / dizini altın da veya sadece root izniyle yazılabilir olarak ayarlanmasında fayda var. En basitinden, birileri içine "sudo shutdown -p now" diye satır eklese "vay başına geleceklere" ;) 

Senin durumunda geçerli değil belki ama bilgi amaçlı, bu tarz kullanımda sistemi döngüye sokacak bir komut var ise, döngünün bir noktada mutlaka sonlanmasını sağlaman gerekir.

illedelinux

Buna çözüm yazarken @mhmtkrktr ustamız aklımdan geçmişti, sağolsun konuya yetişmiş :)
Dosyaları taşımada sudo komutunu unutmuşum, @mhmtkrktr ustamız onu da kibarca uyarmış, teşekkürler :)
GNU/Linux kullanmıyorum, onu yaşıyorum...