Hogyan kell futtatni a parancsfájlokat induláskor?

461

Hogyan tudom az automatikusan parancsfájlokat futtatni, amikor az Ubuntu elindul, ezért nem kell manuálisan futtatni őket az indítás után?

    
készlet myusuf3 04.08.2010 21:54
forrás

9 válasz

192

Attól függően, hogy milyen típusú szkripteket kell futtatnia .. A szolgáltatásokhoz és hasonlókhoz upstart kell használnia. De egy felhasználói szkripthez ezeket el kell indítani a gnome szekcióként! Tekintse meg a Rendszer > Beállítások > Indítási alkalmazások.

Ha egy oldalsó megjegyzésre van szükség, ha a terminál bejelentkezéskor futtatni kell néhány parancsfájlt, hozzáadhatja azokat a bash_login fájlt a saját könyvtárában.

14.04-ig és idősebbeknél

Egy egyszerű parancs (amelyiknek nem kell futnia) egy Upstart feladatot használhat, például:

start on startup
task
exec /path/to/command

Mentse ezt.conf fájlban a (z)/etc/init -ban (ha szüksége van rá, hogy rootként fusson, amikor a rendszer felkelt), vagy~/.config/upstart (ha szüksége van rá hogy futtatható felhasználóként a bejelentkezéskor).

    
válasz adott LassePoulsen 05.08.2010 01:26
forrás
479

Az egyik megközelítés egy @reboot cron feladat felvétele:

  1. Acrontab -e futása lehetővé teszi a cron szerkesztését.
  2. Ehhez hasonló sor hozzáadása:

    @reboot /path/to/script
    

    végrehajtja a szkriptet, miután a számítógép felindul.

válasz adott ceejayoz 04.08.2010 21:57
forrás
137

Mi a helyzet a/etc/rc.local paranccsal? ehhez a fájl szerkesztéséhez a sudo hozzáférést kell használni.

sudo nano /etc/rc.local
    
válasz adott paolo granada lim 05.08.2010 18:40
forrás
68

A parancsok automatikus futtatásához különböző módok érhetők el:

  1. A upstart rendszer végrehajtja az összes parancsfájlt, amelyről konfigurációt talál a/etc/init könyvtárban. Ezek a szkriptek a rendszer indításakor (vagy bizonyos események, például egy leállítási kérés esetén válaszolva) futnak, és így vannak olyan parancsok is, amelyek nem működnek együtt a felhasználóval; az összes kiszolgáló elindul a mechanizmus használatával.

    Olvasható bevezetést talál a következő webhelyen: link a man oldalakman 5 init ésman 8 init give a részletes adatokat.

  2. A saját könyvtárában a.gnomerc nevű shell-parancsfájl automatikusan beérkezik minden alkalommal, amikor bejelentkezik egy GNOME munkamenetbe. Tetszőleges parancsokat tehet fel; az ebben a szkriptben beállított környezeti változókat minden olyan program fogja látni, amelyet a munkamenetben futtat.

    Ne feledje, hogy a munkamenet csak a.gnomerc szkript befejezéséig indul el; ezért ha hosszú távon futó programot szeretne futtatni, akkor a& -ot hozzá kell csatolnia a programhíváshoz, hogy eltávolíthassa a futó shellból.

  3. A Rendszer - > Beállítások - > Indítási alkalmazások lehetővé teszi, hogy meghatározza, milyen alkalmazásokat kell elindítani, amikor a grafikus munkamenet elindul (az Ubuntu előre meghatározott néhányat), és hozzáadja vagy eltávolítja ízlését. Ez a.gnomerc szkriptnek majdnem ugyanaz a célja és hatálya, kivéve, ha nem kell tudnia ash szintaxist (de sem ash programozási konstrukciót sem használhatod).

válasz adott Riccardo Murri 05.08.2010 16:02
forrás
53

15.04-ig és később:

A (rövid életű) 1 parancs futtatásához rendszerindításkor üzembe helyezéskor aOneShot típusú rendszerdegységet használhatja. Például, készítsen/etc/systemd/system/foo.service tartalmat:

[Unit]
Description=Job that runs your user script

[Service]
ExecStart=/some/command
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

Ezután fut:

sudo systemctl daemon-reload
sudo systemctl enable foo.service

Alapvetően ez csak a tipikus Upstart feladatot konvertálja egy systemd one-ra (lásd Sendd a Upstart felhasználóknak ).

Több parancsot futtathat ugyanabból a szolgáltatásfájlból, többExecStart sorral:

[Service]
ExecStart=/some/command
ExecStart=/another/command some args
ExecStart=-/a/third/command ignore failure

A parancsot mindig a teljes elérési utat kell megadni. Ha valamelyik parancs sikertelen, a többi nem fut. A-, mielőtt az elérési út megmondja a systemd-nek, hogy figyelmen kívül hagyja a nem nulla kijárati állapotot (ahelyett, hogy hibát vennének figyelembe).

Releváns:

A felhasználói munkamenetekhez létrehozhatja a systemd egységet a~/.config/systemd -ben. Ennek 16.04-től kell működnie, de nem az Ubuntu korábbi kiadásait a systemd-nel (mivel még használtak felfelé a felhasználói munkamenetekhez). A felhasználói munkamenetegységek ugyanazokkal a parancsokkal vezérelhetők, mint a rendszerszolgáltatásoknál, de a--user opció hozzáadva:

systemctl --user daemon-reload
systemctl --user status foo.service

1 A hosszú életű démonokkal szemben.

    
válasz adott muru 09.01.2016 20:21
forrás
22
$HOME/.config/autostart
  • Ez a hely indító alkalmazáslistát tartalmaz.
  • .desktop fájlt lehet itt elhelyezni, amelyet az indításkor kell végrehajtani.

Példa a.desktop fájlra:

A.desktop fájlt a$HOME/.config/autostart -ban és achmod +x értékkel adta meg:

[Desktop Entry]
Type=Application
Exec="</path/to/script>"
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=Startup Script

A"</path/to/script>" helyét ascript.sh
elérési útjával váltotta fel (általában a/usr/local/bin so -hoz ajánlott, amely közvetlenül végrehajtható a parancsmyscript helyett"</path/to/script>").

Példa ascript.sh:

példare
#!/bin/bash
<commands to be executed>
exit

Az eredmény: .desktop fájl indul a$HOME/.config/autostart -ból, amely aExec= parancsot futtatja

Így indulhat el a kívánt shell parancsfájl!

    
válasz adott Pandya 20.07.2014 08:14
forrás
18

Az egyszerű dolgokhoz parancsot adhatsz a Rendszer > Beállítások > Sessions parancsra a szkript helyére.

Alternatívaként hozzáadhatja azt a /etc/init.d/rc.local könyvtárhoz, vagy upstart munkát készíthet, ha ez egy < alacsony szintű cuccot.

További információkért keresse fel a linket

    
válasz adott tutuca 04.08.2010 21:59
forrás
5

Ehhez upstart kell használnia. A Upstart az automatikusan induló Ubuntu folyamatokhoz használható. Ez egy továbbfejlesztett megoldás, mint a régi System-V init.d szkriptek. Azt is lehetővé teszi, hogy előfeltételeket adjon a parancsfájl kezdetének (azaz, ha a hálózat működik? Stb.)

    
válasz adott txwikinger 04.08.2010 21:58
forrás
3

cron válasz végrehajtva különbözik a legmagasabb szavazattól

Ez a válasz még mindigcron -ot használ, de más módszert alkalmaz, mint a legmagasabb szavazott választ. Ez az Ubuntu 16.04 óta működik, de valószínűleg hamarabb támogatja. Csak acron használatával kezdtem el futtatni a feladatokat, amikor a számítógép 16.04 óta kezdődik.

Mikor fut acron?

A megjegyzésekben valaki megkérdezte: "mikor futnak?". Ezt a syslog / journalctl:

kifejezéssel tudhatja meg
$ journalctl -b | grep cron
Jan 02 16:54:40 alien cron[919]: (CRON) INFO (pidfile fd = 3)
Jan 02 16:54:40 alien cron[919]: (CRON) INFO (Running @reboot jobs)
Jan 02 16:54:40 alien systemd[1]: Started Run anacron jobs.
Jan 02 16:54:40 alien anacron[949]: Anacron 2.3 started on 2018-01-02
Jan 02 16:54:40 alien anacron[949]: Normal exit (0 jobs run)
Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[954]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[951]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[950]: pam_unix(cron:session): session opened for user root by (uid=0)
Jan 02 16:54:40 alien CRON[985]: (root) CMD (   /usr/local/bin/cron-reboot-cycle-grub-background)
Jan 02 16:54:40 alien CRON[954]: pam_unix(cron:session): session closed for user root
Jan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587
Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session closed for user root
Jan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587
Jan 02 16:54:40 alien CRON[950]: pam_unix(cron:session): session closed for user root

Megjegyzendő, hogy acron e-mailt küldhet a feladatok állapotáról és a@reboot munkafolyamatok futtatására, így a korai hálózati menedzser és az e-mail nem fog működni, hacsak nem tesz egysleep parancsot a parancsfájlba.

Hol helyezze el a szkripteket

Helyezze a szkripteket a/etc/cron.d:

könyvtárba
$ ll /etc/cron.d
total 44
drwxr-xr-x   2 root root  4096 Nov 26 19:53 ./
drwxr-xr-x 139 root root 12288 Dec 31 13:58 ../
-rw-r--r--   1 root root   244 Dec 28  2014 anacron
-rw-r--r--   1 root root   148 Feb 18  2017 cycle-grub-background
-rw-r--r--   1 root root   138 Mar  5  2017 display-auto-brightness
-rw-r--r--   1 root root   460 Nov 26 19:53 nvidia-hdmi-sound
-rw-r--r--   1 root root   102 Feb  9  2013 .placeholder
-rw-r--r--   1 root root   224 Nov 19  2016 touch-vmlinuz
-rw-r--r--   1 root root   700 Aug  5 11:15 turn-off-hyper-threading

Mi a szkript néz ki?

Íme néhány parancsfájl, amelyet minden indításnál elindítottam:

$ cat /etc/cron.d/cycle-grub-background SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin 
@reboot   root    /usr/local/bin/cron-reboot-cycle-grub-background

$ cat /etc/cron.d/touch-vmlinuz
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot   root    touch "/boot/vmlinuz-"'uname -r'
    
válasz adott WinEunuuchs2Unix 03.01.2018 02:02
forrás