Làm thế nào để chạy các kịch bản bắt đầu lên?

Làm thế nào tôi có thể chạy kịch bản tự động khi Ubuntu bắt đầu lên vì vậy tôi không cần phải chạy họ tay sau khi khởi động?

Một cách tiếp cận là thêm một @khởi động lại định kỳ nhiệm vụ:

  1. Chạy crontab -e sẽ cho phép anh để sửa định kỳ.
  2. Thêm một dòng giống như điều này để nó:

    @reboot /path/to/script

    sẽ thực hiện điều đó kịch bản khi bật máy lên.

Tùy thuộc vào những gì sắp xếp của kịch bản, bạn cần phải chạy.. Cho dịch vụ và như thế bạn phải sử dụng mới nổi. Nhưng đối với một người sử dụng kịch bản này phải được đưa ra là phiên bản của gnome! Có một cái nhìn dưới Hệ thống gt; sở Thích > Ứng dụng Khởi động.

Trên một mặt lưu ý, nếu cậu cần một số kịch bản để được chạy trên thiết bị đầu cuối đăng nhập bạn có thể thêm họ đến .bash_login tập tin trong thư mục.

Cho 14.04 và cũ

Một mệnh lệnh đơn giản (mà không cần phải chạy) có thể sử dụng một mới Nổi công việc như thế:

start on startuptaskexec /path/to/command

Tiết kiệm này trong một .conf tập tin trong /etc/init (nếu bạn cần nó để chạy như là gốc khi hệ thống khởi động lên), hoặc trong ~/.config/upstart (nếu bạn cần để chạy như của bạn dùng khi bạn log in).

Bạn có thể thêm lệnh /etc/rc.local:

sudo nano /etc/rc.local

Này, thực hiện lệnh như là gốc.

Để thực hiện lệnh như là một cụ thể sử dụng, sử dụng sudo -i -u (-i cũng chạy đăng nhập vỏ). Ví dụ, để thành lập một liên tục SSH đường hầm, nơi myhost là definde trong johndoes ~/.ssh/config tập tin:

sudo -i -u johndoe autossh -nNT -L 1234:localhost:1234 myhost

Lưu ý rằng nếu /etc/rc.local không tồn tại (như trường hợp trên ổ kể từ khi 16.04), bạn cần thêm một công việc dòng lúc đầu, (ví dụ: #!/bin/bash), và đảm bảo các tập tin được thực thi:

sudo chmod a+x /etc/rc.local

Cho 15.04 và sau đó:

Để chạy một (ngắn ngủi)1 lệnh lúc khởi động bằng cách sử dụng systemd bạn có thể sử dụng một lệnh đơn vị của loại OneShot. Ví dụ, tạo ra /etc/systemd/system/foo.service có chứa:

[Unit]Description=Job that runs your user script[Service]ExecStart=/some/commandType=oneshotRemainAfterExit=yes[Install]WantedBy=multi-user.target

Sau đó chạy:

sudo systemctl daemon-reloadsudo systemctl enable foo.service

Về cơ bản, đây là chỉ cần chuyển đổi một điển hình mới Nổi việc để một tập hợp một (xem Lệnh cho người mới Nổi).

Bạn có thể chạy nhiều lệnh từ cùng một vụ thấy, cách sử dụng nhiều ExecStart đường:

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

Lệnh luôn luôn phải được đưa ra với các đường dẫn đầy đủ. Nếu có lệnh không, phần còn lại không chạy. A - trước khi các con đường cho các để bỏ qua một số không thoát khỏi trạng thái (thay vì xem xét nó là một thất bại).

Có liên quan:


Cho người dùng buổi bạn có thể tạo ra các lệnh đơn vị trong ~/.config/systemd thay vào đó. Điều này sẽ làm việc với 16.04 trở đi, nhưng không phải trước đó chí tượng với các (kể từ khi những người vẫn sử dụng Mới cho người dùng buổi). Phiên người dùng các đơn vị có thể được kiểm soát với các lệnh tương tự như với dịch vụ hệ thống, nhưng với những --user thêm lựa chọn:

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

Vỏ cú pháp

Lưu ý rằng, không giống như mới Nổi, lệnh đó không chạy Exec* lệnh thông qua một vỏ. Nó thực hiện một số hạn chế biến mở rộng và nhiều chỉ huy (tách ra bởi ;) bản thân, nhưng đó là về nó xa như vỏ-như cú pháp đi. Cho bất cứ điều gì phức tạp hơn, nói chuyển hướng hay ống bọc lệnh của bạn trong sh -c '...' hay bash -c '...'.


1Như trái ngược với sống lâu năng.

Có những cách khác nhau để tự động chạy lệnh:

  1. Những mới nổi hệ thống sẽ thực hiện tất cả các lệnh từ đó, nó tìm thấy một cấu hình trong thư mục /etc/init. Các kịch bản sẽ chạy trong hệ thống khởi động (hoặc để đáp ứng một số sự kiện, ví dụ như, một tắt máy yêu cầu) và vì vậy là nơi để chạy lệnh đó không tác với người sử dụng tất cả các máy chủ đang bắt đầu sử dụng cơ chế này.

    Bạn có thể tìm thấy một người có thể đọc được giới thiệu đến lúc: http://upstart.ubuntu.com/getting-started.html các trang người đàn ông man 5 initman 8 init cung cấp cho bạn biết đầy đủ chi tiết.

  2. Một kịch bản tên là .gnomerc trong thư mục là tự động lấy mỗi khi bạn nhập vào GNOME họp. Bạn có thể đưa tùy ý lệnh trong đó, biến môi trường mà bạn thiết lập trong kịch bản này sẽ được nhìn thấy bởi bất kỳ chương trình mà cậu chạy trong phiên của bạn.

    Lưu ý rằng các buổi không bắt đầu cho đến khi .gnomerc kịch bản là kết thúc, do đó, nếu bạn muốn tự khởi động một số dài-chạy chương trình, bạn cần phải nối & các chương trình, gọi, để tháo nó từ chạy vỏ.

  3. Các đơn lựa chọn Hệ thống và tốc sở Thích và tốc Ứng dụng Khởi động cho phép anh để xác định những ứng dụng nên bắt đầu khi bạn đồ họa họp bắt đầu (Ubuntu predefines một), và thêm hoặc bỏ chúng vào của hương vị. Này đã gần như cùng một mục đích và phạm vi của những .gnomerc kịch bản, ngoại trừ bạn không cần phải biết sh cú pháp (nhưng không phải là bạn có thể sử dụng bất kỳ sh lập trình xây dựng).

$HOME/.config/autostart có một khi ứng dụng danh sách. .desktop các tập tin trong thư mục này sẽ được thực hiện vào khởi động. Nó có thể cần thực thi cho phép (chmod +x startup.desktop).

Ví dụ mẫu cho .desktop tập tin:

[Desktop Entry]Type=ApplicationExec="</path/to/script>"Hidden=falseNoDisplay=falseX-GNOME-Autostart-enabled=trueName=Startup Script

Ở đây "</path/to/script>" được thay thế bằng con đường của bạn script.shNếu bạn đặt của kịch bản myscript trong /usr/local/bin vì vậy, nó có thể được thực hiện trực tiếp theo lệnh, bạn có thể viết myscript thay vì "</path/to/script>".

Mẫu ví dụ về myscript.sh:

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

Quả:.desktop tập tin sẽ được đưa ra từ $HOME/.config/autostart mà thực hiện kịch bản bởi Exec=

Cho những thứ đơn giản có thể thêm một lệnh trong >>Hệ Thống-Sở Thích-Buổi chỉ vào vị trí của bạn kịch bản.

Ngoài ra, bạn có thể thêm nó để /etc sao.d máy bay.địa phương, hoặc làm cho một mới nổi nếu đó là một hơn mức độ thấp thứ.

Hãy nhìn vào https://help.ubuntu.com/community/UbuntuBootupHowto để biết thêm thông tin

cron câu trả lời thực hiện khác nhau từ trên bầu

Câu trả lời này vẫn còn, sử dụng cron nhưng sử dụng một phương pháp khác nhau hơn trên bầu chọn câu trả lời. Việc này kể từ khi Ubuntu 16.04 nhưng có lẽ hỗ trợ sớm hơn nhiều. Nó chỉ là tôi bắt đầu sử dụng cron để chạy việc làm khi máy tính khởi động kể từ khi 16.04.

Khi nào cron chạy?

Trong ý kiến ai đó hỏi một khi họ chạy?và nước. Bạn có thể nói trong hệ thống tạo / journalctl:

$ journalctl -b | grep cronJan 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-02Jan 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 rootJan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587Jan 02 16:54:40 alien CRON[952]: pam_unix(cron:session): session closed for user rootJan 02 16:54:40 alien cron[919]: sendmail: Cannot open smtp.gmail.com:587Jan 02 16:54:40 alien CRON[950]: pam_unix(cron:session): session closed for user root

Một điều để được chú ý cron có thể gửi email cho bạn tình trạng của công việc và chạy @reboot công việc chạy sớm vậy mạng người quản lý và email sẽ không chạy trừ khi anh đưa một sleep chỉ huy vào kịch bản của bạn(s).

Nơi để đưa của kịch bản

Đưa kịch bản của bạn trong các mục /etc/cron.d:

$ ll /etc/cron.dtotal 44drwxr-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

Những gì một kịch bản giống như thế?

Đây là một kịch bản của tôi đã thiết lập để chạy mỗi lần khởi động:

$ cat /etc/cron.d/cycle-grub-background SHELL=/bin/shPATH=/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-vmlinuzSHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin@reboot   root    touch "/boot/vmlinuz-"`uname -r`

Bạn nên sử dụng mới nổi cho việc này. Mới nổi được sử dụng cho trình quá trình tự động bắt đầu. Nó là một giải pháp giống một Hệ thống-V khởi.d kịch bản. Nó cũng cho phép anh để đặt trong điều kiện cho sự bắt đầu của kịch bản của bạn (tức là anh cần mạng chạy? etc.)

Nếu bạn muốn kịch bản để chạy trước khi lệnh ngay sau khi hạt nhân bắt đầu nút điều khiển cách là thêm init=/path/to/script để các dòng lệnh hạt nhân trong /boot/grub/grub.cfg hoặc hơn trong tương lai chứng minh làm của riêng đơn nhập vào /etc/grub.d/40_custom bởi sao chép một đơn nhập từ /boot/grub/grub.cfg và làm cho cần thay đổi (và chạy update-grub sau đó cho grub để thêm chỉnh để tập tin /boot/grub/grub.cfg).

linux   /boot/vmlinuz-5.4.0-26-generic ... ro  quiet splash 

thay đổi

linux   /boot/vmlinuz-5.4.0-26-generic ... ro  quiet splash init=/path/to/script

Hãy chăm sóc cho đúng đưa ví dụ: #!/bin/bash trên dòng đầu tiên và exec /sbin/init (nếu /sbin/init tồn tại trên hệ thống của bạn - trên mỏ nó điểm để các) cuối cùng để tránh hạt nhân hoảng loạn.

Nếu có ai cũng có thể thấy cả KHI nào và ở ĐÂU đó sẽ là tuyệt vời. Tôi nói điều này bởi vì tôi biết, có ít nhất 2 cách để bắt đầu một kịch bản mà sẽ lửa trước khi khác đã được bắt đầu (như X 11)

1 để @GabrielFair. Một phần LỚN của vấn đề là những nguyên bản câu hỏi và câu trả lời là MƯỜI TUỔI. Tôi cũng muốn thêm rằng có quá nhiều cách để giải quyết vấn đề này. Chuyện gì xảy ra với các đơn giản của triết lý Unix?! Yêu cầu ai đó hiểu biết và với đủ điểm viết lại bài này, hoặc thêm một mới đến ngày lên, trả lời dứt khoát cho hệ điều hành phiên bản hiện đại.

Này, toàn bộ câu trả lời đề là một mớ hỗn độn. Chồng trao Đổi dạng không có vẻ là thích hợp nhất cho câu hỏi này