在京東上怎樣做網(wǎng)站/免費(fèi)平臺推廣
如何在linux系統(tǒng)重啟或啟動時執(zhí)行命令或腳本(也支持docker容器內(nèi)部)
- 第一種:使用 systemd 服務(wù)單元在重啟或啟動時運(yùn)行命令或腳本
- 第二種:使用 /etc/rc.d/rc.local 文件在重啟或啟動時運(yùn)行腳本或命令
- 第三種:使用 crontab 在重啟或啟動時執(zhí)行命令或腳本
我們知道linux在啟動時,可以通過systemctl或者chkconfig來設(shè)置某個服務(wù)開機(jī)自啟,
但是有時我們需要在系統(tǒng)啟動時添加自定義腳本、命令或服務(wù),該怎么做?
介紹三種方法,我只用過第一種。
第一種:使用 systemd 服務(wù)單元在重啟或啟動時運(yùn)行命令或腳本
只需要創(chuàng)建一個 systemd 啟動腳本并將其放在 /etc/systemd/system/ 目錄中:
# vim start_redis_celery.service[Unit]
Description=Run a Custom Script at Startup
After=default.target[Service]
ExecStart=/start_redis_celery.sh[Install]
WantedBy=default.target
參數(shù)提示:
Description:運(yùn)行軟件描述
Documentation:軟件的文檔
After:因?yàn)檐浖膯油ǔR蕾囉谄渌浖?#xff0c;這里是指定在哪個服務(wù)被啟動之后再啟動,設(shè)置優(yōu)先級
Wants:弱依賴于某個服務(wù),目標(biāo)服務(wù)的運(yùn)行狀態(tài)可以影響到本軟件但不會決定本軟件運(yùn)行狀態(tài)
Requires:強(qiáng)依賴某個服務(wù),目標(biāo)服務(wù)的狀態(tài)可以決定本軟件運(yùn)行。
ExecStart:執(zhí)行命令
ExecStop:停止執(zhí)行命令
ExecReload:重啟時的命令
Type:軟件運(yùn)行方式,默認(rèn)為simple
WantedBy:這里相當(dāng)于設(shè)置軟件,選擇運(yùn)行在linux的哪個運(yùn)行級別,只是在systemd中不在有運(yùn)行級別概念,但是這里權(quán)當(dāng)這么理解。
將單元腳本放置在 systemd 所在位置后,運(yùn)行以下命令更新 systemd 配置文件并啟用服務(wù):
# systemctl daemon-reload
# systemctl enable start_redis_celery.service
reboot重啟測試效果!
第二種:使用 /etc/rc.d/rc.local 文件在重啟或啟動時運(yùn)行腳本或命令
/etc/rc.local 文件是在切換到多用戶運(yùn)行級別的過程結(jié)束時,在所有正常的計(jì)算機(jī)服務(wù)啟動之后執(zhí)行的。
所以需要將你的腳本位置添加到 /etc/rc.d/rc.local 文件中以在啟動時運(yùn)行。
確保該文件有運(yùn)行權(quán)限:
# chmod +x /etc/rc.d/rc.local
比如
腳本完成后,設(shè)置可執(zhí)行權(quán)限:
# chmod +x /opt/scripts/start_redis_celery.sh
最后,將該腳本添加到rc.local文件底部:
# vi /etc/rc.d/rc.local/opt/scripts/start_redis_celery.sh
reboot重啟測試效果!
第三種:使用 crontab 在重啟或啟動時執(zhí)行命令或腳本
cron 在特定時間在后臺自動執(zhí)行計(jì)劃的作業(yè)??梢栽?cron 任務(wù)中使用特殊的字符串 @reboot 來完成。@reboot
是一個特殊的字符串,它允許用戶在啟動時運(yùn)行任何命令或腳本。
所以呢只需在 crontab 文件中添加以下條目:
# crontab -e@reboot /opt/scripts/start_redis_celery.sh
reboot重啟測試效果!
以上方法也可以進(jìn)入容器內(nèi)部編寫,實(shí)現(xiàn)容器啟動自動執(zhí)行某些程序的功能