systemctl腳本存放在:/usr/lib/systemd/,有系統(system)和用戶(user)之分,像需要開機不登陸就能運行的程序,還是存在系統服務里吧,即:/usr/lib/systemd/system目錄下
每一個服務以.service結尾,一般會分為3部分:[Unit]、[Service]和[Install]
示例:
[root@localhost system]# cat ntpdate.service [Unit] Description=Set time via NTP After=syslog.target network.target nss-lookup.target Before=time-sync.target Wants=time-sync.target [Service] Type=oneshot ExecStart=/usr/libexec/ntpdate-wrapper RemainAfterExit=yes [Install] WantedBy=multi-user.target
Unit 描述信息 Description= #描述信息 After= #在那個程序之前啟動 Before #在那個程序之后啟動
Service 啟動信息 Type= #啟動類型。 #Type=oneshot :這一選項適用於只執行一項任務、隨后立即退出的服務。可能需要同時設置 RemainAfterExit=yes 使得 systemd 在服務進程退出之后仍然認為服務處於激活狀態。 #Type=notify :與 Type=simple 相同,但約定服務會在就緒后向 systemd 發送一個信號。這一通知的實現由 libsystemd-daemon.so 提供。 #Type=dbus :若以此方式啟動,當指定的 BusName 出現在DBus系統總線上時,systemd認為服務就緒。 #Type=idle :systemd會等待所有任務處理完成后,才開始執行 idle 類型的單元。其他行為與 Type=simple 類似。 #Type=forking :systemd認為當該服務進程fork,且父進程退出后服務啟動成功。對於常規的守護進程(daemon),除非你確定此啟動方式無法滿足需求,使用此類型啟動即可。使用此啟動類型應同時指定 PIDFile=,以便 systemd 能夠跟蹤服務的主進程。 #Type=simple :(默認值) systemd認為該服務將立即啟動。服務進程不會 fork 。如果該服務要啟動其他服務,不要使用此類型啟動,除非該服務是socket 激活型。 RemainAfterExit=yes #通知systemctl結束 User= Group= Restart= #Restart=always的時候systemctl會不斷重啟這個腳本,這種適合程序是腳本的。 #Restart=no的時候不會重啟,適合程序軟件。 ExecStart= #后面跟程序的絕對路徑,如果有啟動參數,后面加上,如果程序沒有參數不需要添加ExecStop這條語句 ExecStop= #后面跟程序的絕對路徑,如果有停止參數,后面加上 PIDFile= #加上程序PID文件絕對路徑 install 安裝信息 WantedBy= #WantedBy=multi-user.target(單元被允許運行需要的弱依賴性單元,Wantby從Want列表獲得依賴信息。)
systemctl enable nginx.service
systemctl start nginx.service