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

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Linux 基线检测是一项非常重要的安全措施,可以检查系统是否符合最佳安全实践。以下是一个简单的基线检测脚本,可以用于检查常见的安全问题。 ```bash #!/bin/bash # 检查是否为 root 用户 if [[ $(id -u) -ne 0 ]]; then echo "This script must be run as root" exit 1 fi # 检查是否有未应用的安全更新 if [[ $(apt list --upgradable 2>/dev/null | grep -c security) -gt 0 ]]; then echo "There are security updates available that have not been applied" fi # 检查是否启用了防火墙 if [[ $(ufw status | grep -c 'Status: active') -eq 0 ]]; then echo "Firewall is not enabled" fi # 检查是否启用了 SELinux if [[ $(getenforce | grep -c 'Enforcing') -eq 0 ]]; then echo "SELinux is not enforcing" fi # 检查是否启用了 SSH 安全选项 if [[ $(grep -c '^PermitRootLogin no' /etc/ssh/sshd_config) -eq 0 ]]; then echo "SSH root login is enabled" fi # 检查是否启用了密码复杂度要求 if [[ $(grep -c '^password\s+requisite\s+pam_cracklib.so' /etc/pam.d/common-password) -eq 0 ]]; then echo "Password complexity requirements are not enforced" fi # 检查是否启用了日志记录 if [[ $(grep -c '^authpriv.* /var/log/auth.log' /etc/rsyslog.conf) -eq 0 ]]; then echo "Logging is not configured properly" fi # 检查是否禁用了不必要的服务 if [[ $(systemctl list-unit-files --state=enabled | grep -c -v '^\w*.service') -gt 0 ]]; then echo "There are unnecessary services enabled" fi # 检查是否启用了系统日志审核 if [[ $(grep -c '^-a always,exit -F arch=b64.* -S execve -F auid>=1000 -F auid!=4294967295.* -k .*' /etc/audit/audit.rules) -eq 0 ]]; then echo "System audit logging is not configured properly" fi ``` 这个脚本会检查以下内容: - 是否为 root 用户 - 是否有未应用的安全更新 - 是否启用了防火墙 - 是否启用了 SELinux - 是否启用了 SSH 安全选项 - 是否启用了密码复杂度要求 - 是否启用了日志记录 - 是否禁用了不必要的服务 - 是否启用了系统日志审核 你可以根据需要修改此脚本以满足特定的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值