Debian systemd

jessie後取消了init, 改用了systemd, 因此沒有rc.local. 網路上不少使用rc.local的方式, 畢竟官方都不用了, 總是要學習新方式.(crontab?)

在 /etc/system/systemd/ 建一個 FileName.target 的檔案, 並分為以下區塊.
[Unit]
Description=A description for this service unit.
After=network.target
 
[Service]
type=simple
# User=user
# Group=group
# WorkingDirectory=/path/to/folder
ExecStart=/path/to/program [arguments]
Restart=always
ExecStop
RestartSec=3s
 
# Environment="VARIABLE_1=VALUE_1" "VARIABLE_2=VALUE_2"
# Environment="VARIABLE_3=VALUE_3" "VARIABLE_4=VALUE_4"
 
[Install]
WantedBy=multi-user.target

[Unit]

before/after: 關於這個, 需要了解systemd啟動的順序.

由以下的指令可以查到這個服務啟動花了多少時間

systemd-analyze blame

systemd-analyze plot > boot.svg 
systemd-analyze plot > boot.html


type:
Type=simple(預設值):systemd認為該服務將立即啟動。服務程序不會fork。如果該服務要啟動其他服務,不要使用此類型啟動,除非該服務是socket激活型。
Type=forking:systemd認為當該服務程序fork,且父程序退出後服務啟動成功。對於常規的守護程序(daemon),除非你確定此啟動方式無法滿足需求,使用此類型啟動即可。使用此啟動類型應該同時指定 PIDFile=,以便systemd能夠跟蹤服務的主程序。
Type=oneshot:這一選項適用於只執行一項任務、隨後立即退出的服務。可能需要同時設定 RemainAfterExit=yes 使得 systemd 在服務程序退出之後仍然認為服務處於激活狀態。
Type=notify:與 Type=simple 相同,但約定服務會在就緒後向 systemd 發送一個信號。這一通知的實現由 libsystemd-daemon.so 提供。
Type=dbus:若以此方式啟動,當指定的 BusName 出現在D-Bus系統總線上時,systemd認為服務就緒。
Type=idle: systemd會等待所有工作處理完成後,才開始執行idle類型的單元。其他行為和Type=simple 類似。
# systemctl daemon-reload
# 如果要開機自動啟動
# systemctl enable FileName.service
# 如果只是手動啟動
# systemctl start FileName.service
# 檢查狀態
# systemctl status
# journalctl -u Filename.service
# journalctl -u FileName.server -p log檔level

有的時候會不成功

http://felix-lin.com/linux/debianubuntu-%E6%96%B0%E5%A2%9E%E9%96%8B%E6%A9%9F%E8%87%AA%E5%8B%95%E5%9F%B7%E8%A1%8C%E7%A8%8B%E5%BC%8F/

發佈留言