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