自己拿一臺閑置電腦部署了一個postgreSQL服務(wù)败砂,然后每次啟動電腦之后都得重新執(zhí)行一下啟動命令:
user$user-pc sudo su - postgres //切換到postgres用戶下,只有他有權(quán)限運行
postgres$user-pc pg_ctl -D /usr/local/pgsql/data start
這樣很麻煩魏铅。
一是要切換到postgres用戶下昌犹;
二是要手動啟動開啟postgresql服務(wù)命令。
于是想能不能:
- 在我當(dāng)前用戶下執(zhí)行postgres用戶才能執(zhí)行的命令览芳。
- 系統(tǒng)啟動的時候執(zhí)行命令斜姥。
首先解決第一個問題,在當(dāng)前用戶下執(zhí)行其他用戶命令:
經(jīng)過查閱stackoverflow沧竟,得知我們可以用下面方式以當(dāng)前用戶執(zhí)行其他用戶命令:
su - <username> -c "<commands>"
于是就有了:
sudo su - postgres -c ' pg_ctl -D /usr/local/pgsql/data start '
然后解決第二個問題铸敏,啟動時執(zhí)行命令:
由于服務(wù)器是ubuntu18.04。記得以前用centos6.5做服務(wù)器的時候悟泵,啟動命令都是寫在rc.local下的杈笔。但是經(jīng)查,從ubuntu16.10開始就把rc.local服務(wù)化了蒙具,獨立出systemd。
所以朽肥,我們需要寫入一個service禁筏,寫法如下:
首先新建/etc/systemd/system/foo.service
,文件內(nèi)容:
[Unit]
Description=Job that runs your user script
[Service]
ExecStart=/some/command
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
保存退出衡招,執(zhí)行 :
sudo systemctl daemon-reload
sudo systemctl enable foo.service
于我而言篱昔,我創(chuàng)建了/etc/systemd/system/start-postgres.service
文件,里面內(nèi)容為
[Unit]
Description=Job that runs your user script
[Service]
ExecStart=/bin/bash -c " sudo su - postgres -c ' pg_ctl -D /usr/local/pgsql/data start ' "
Type=oneshot
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
然后執(zhí)行
$ sudo systemctl daemon-reload
$ sudo systemctl enable foo.service
重啟計算機(jī)始腾,發(fā)現(xiàn)postgres自動啟動了州刽。
總結(jié)
原先看RHCE教材的時候,不懂systemctl start xxx.service
的具體含義浪箭,現(xiàn)在明白了穗椅。我們的service都寫在/etc/systemd/system/
下,每次開機(jī)只要enabled狀態(tài)的service都會被啟動起來山林。