systemctl服務編寫,及日誌控制

linux 的systemctl是一個系統服務管理工具,當我們想使用這個工具來管理服務,也是比較簡單的。請看例子:

我想把一個java程序ibot寫到系統服務裏:

#[Unit]部分主要是對這個服務的說明,內容包括Description和After,Description
#用於描述服務,After用於描述服務類別
[Unit]
Description=iBot Service
After=syslog.target

#[Service]部分是服務的關鍵,是服務的一些具體運行參數的設置,這裏Type=forking
#是後臺運行的形式,PIDFile爲存放PID的文件路徑,ExecStart爲服務的具體運行命令,
#ExecReload爲重啓命令,ExecStop爲停止命令,PrivateTmp=True表示給服務分配獨
#立的臨時空間,注意:[Service]部分的啓動、重啓、停止命令全部要求使用絕對路徑,使
#用相對路徑則會報錯!
#StandardOutput=null 是將程序業務日誌輸出到空,也可以指定文件,或者交給journal處理

[service]
Type=forking
ExecStart=/usr/local/java/bin/java -jar /usr/local/services/iBot-1.0.0-version.jar 
SuccessExitStatus=143
ExecStop=/usr/bin/kill -15  $MAINPID
StandardOutput=null
#StandardOutput=/tmp/services/logs/iBot/iBot-run.log

#[Install]部分是服務安裝的相關設置,可設置爲多用戶的
[Install]
WantedBy=multi-user.target

其中,StandardOutput=null是我遇到過的問題,程序的日誌交由journal處理後,journal把日誌寫到了系統日誌。日誌產生了混亂。所以可以通過StandardOutput=null來控制,把日誌輸出關閉。或者寫對別的文件裏去。常見的參數有:

StandardInput=null
StandardOutput=inherit
StandardError=inherit

我們也可以通過systemctl show iBot 來查看相關服務的信息,下面是nginx的信息

Type=forking
Restart=no
PIDFile=/var/run/nginx.pid
NotifyAccess=none
RestartUSec=100ms
TimeoutStartUSec=1min 30s
TimeoutStopUSec=1min 30s
WatchdogUSec=0
WatchdogTimestamp=三 2019-11-06 10:51:36 CST
WatchdogTimestampMonotonic=103011729
StartLimitInterval=10000000
StartLimitBurst=5
StartLimitAction=none
FailureAction=none
PermissionsStartOnly=no
RootDirectoryStartOnly=no
RemainAfterExit=no
GuessMainPID=yes
MainPID=1692
ControlPID=0
FileDescriptorStoreMax=0
StatusErrno=0
Result=success
ExecMainStartTimestamp=三 2019-11-06 10:51:36 CST
ExecMainStartTimestampMonotonic=103011700
ExecMainExitTimestampMonotonic=0
ExecMainPID=1692
ExecMainCode=0
ExecMainStatus=0
ExecStart={ path=/usr/sbin/nginx ; argv[]=/usr/sbin/nginx -c /etc/nginx/nginx.conf ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/
ExecReload={ path=/bin/kill ; argv[]=/bin/kill -s HUP $MAINPID ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(n
ExecStop={ path=/bin/kill ; argv[]=/bin/kill -s TERM $MAINPID ; ignore_errors=no ; start_time=[n/a] ; stop_time=[n/a] ; pid=0 ; code=(nu
Slice=system.slice
ControlGroup=/system.slice/nginx.service
MemoryCurrent=18446744073709551615
TasksCurrent=18446744073709551615
Delegate=no
CPUAccounting=no
CPUShares=18446744073709551615
StartupCPUShares=18446744073709551615
CPUQuotaPerSecUSec=infinity
BlockIOAccounting=no
BlockIOWeight=18446744073709551615
StartupBlockIOWeight=18446744073709551615
MemoryAccounting=no
MemoryLimit=18446744073709551615
DevicePolicy=auto
TasksAccounting=no
TasksMax=18446744073709551615
UMask=0022
LimitCPU=18446744073709551615
LimitFSIZE=18446744073709551615
LimitDATA=18446744073709551615
LimitSTACK=18446744073709551615
LimitCORE=18446744073709551615
LimitRSS=18446744073709551615
LimitNOFILE=4096
LimitAS=18446744073709551615
LimitNPROC=128268
LimitMEMLOCK=65536
LimitLOCKS=18446744073709551615
LimitSIGPENDING=128268
LimitMSGQUEUE=819200
LimitNICE=0
LimitRTPRIO=0
LimitRTTIME=18446744073709551615
OOMScoreAdjust=0
Nice=0
IOScheduling=0
CPUSchedulingPolicy=0
CPUSchedulingPriority=0
TimerSlackNSec=50000
CPUSchedulingResetOnFork=no
NonBlocking=no
StandardInput=null
StandardOutput=journal
StandardError=inherit
TTYReset=no
TTYVHangup=no
TTYVTDisallocate=no
SyslogPriority=30
SyslogLevelPrefix=yes
SecureBits=0
CapabilityBoundingSet=18446744073709551615
AmbientCapabilities=0
MountFlags=0
PrivateTmp=no
PrivateNetwork=no
PrivateDevices=no
ProtectHome=no
ProtectSystem=no
SameProcessGroup=no
IgnoreSIGPIPE=yes
NoNewPrivileges=no
SystemCallErrorNumber=0
RuntimeDirectoryMode=0755
KillMode=control-group
KillSignal=15
SendSIGKILL=yes
SendSIGHUP=no
Id=nginx.service
Names=nginx.service
Requires=basic.target
Wants=network-online.target system.slice
Conflicts=shutdown.target
Before=shutdown.target
After=remote-fs.target basic.target system.slice network-online.target nss-lookup.target systemd-journald.socket
Documentation=http://nginx.org/en/docs/
Description=nginx - high performance web server
LoadState=loaded
ActiveState=active
SubState=running
FragmentPath=/usr/lib/systemd/system/nginx.service
UnitFileState=disabled
UnitFilePreset=disabled
InactiveExitTimestamp=三 2019-11-06 10:51:35 CST
InactiveExitTimestampMonotonic=102834280
ActiveEnterTimestamp=三 2019-11-06 10:51:36 CST
ActiveEnterTimestampMonotonic=103011759
ActiveExitTimestampMonotonic=0
InactiveEnterTimestampMonotonic=0
CanStart=yes
CanStop=yes
CanReload=yes
CanIsolate=no
StopWhenUnneeded=no
RefuseManualStart=no
RefuseManualStop=no
AllowIsolate=no
DefaultDependencies=yes
OnFailureJobMode=replace
IgnoreOnIsolate=no
IgnoreOnSnapshot=no
NeedDaemonReload=no
JobTimeoutUSec=0
JobTimeoutAction=none
ConditionResult=yes
AssertResult=yes
ConditionTimestamp=三 2019-11-06 10:51:35 CST
ConditionTimestampMonotonic=102833967
AssertTimestamp=三 2019-11-06 10:51:35 CST
AssertTimestampMonotonic=102833967
Transient=no

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章