新增指令在Ubuntu 開機時執行
新增指令到 linux 開機執行作法百百種,我用的作法是,先寫一個 .sh 的 shell command, ex: maxserver.sh 放到 /etc/init.d/maxserver.sh
檔案內容如下:
#!/bin/sh /root/myserver-folder/start.py > /dev/null &
說明:> /dev/null & 讓指令丟到背景跑
再讓 /etc/rcS.d/S90myserver.sh 連到 /etc/init.d/myserver.sh
ln -s /etc/init.d/myserver.sh /etc/rcS.d/S90myserver.sh
說明: ln 第1個檔案是隨意找地方放,第2個是放到 /etc/rcS.D/ 目錄裡, S90 是指這個 service 是 啟用中的Serivce 執行的順序是 90 號。
列出所以的serivce
How do you get a list of all starting services?
service --status-all
然後使用指令 service myserver.sh
就可以看到我們的服務了。
在 CentOS 可以直接修改 /etc/rc.d/rc.local
以前在 Redhat 及 CentOS 要設定開機自動執行的 Shell Script, 一般都會在檔案 /etc/rc.d/rc.local 加入需要執行的 Shell Script 或指令, 但在 CentOS 7 開始, /etc/rc.d/rc.local 預設許可權改為 644, 即沒有執行許可權, 為甚麼會這樣, 可以開啟 CentOS 7 的 /etc/rc.d/rc.local 看看, 裡面有 Redhat 的說明:
#!/bin/bash # THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES # # It is highly advisable to create own systemd services or udev rules # to run scripts during boot instead of using this file. # # In constrast to previous versions due to parallel execution during boot # this script will NOT be run after all other services. # # Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure # that this script will be executed during boot.
可以看到這個檔案在 RHEL 及 CentOS 7 只為瞭解決相容性, Redhat 建議還是自行建立 systemd 服務或者 udev rules 較好, 如果真的需要使用 rc.local, 只要執行 chmod 給予 rc.local 可執行許可權即可:
# chmod +x /etc/rc.d/rc.local
執行以上指令後, 下次開機便會自動執行 rc.local 內的指令或 Shell Script.