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ụ:
- Chạy
crontab -e
sẽ cho phép anh để sửa định kỳ. -
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 johndoe
s ~/.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:
-
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 init
vàman 8 init
cung cấp cho bạn biết đầy đủ chi tiết. -
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ỏ. 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ếtsh
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.sh
Nế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