相关疑难解决方法(0)

为什么 bashrc 会检查当前 shell 是否是交互式的?

在我的拱安装,/etc/bash.bashrc以及/etc/skel/.bashrc包含这些行:

# If not running interactively, don't do anything
[[ $- != *i* ]] && return
Run Code Online (Sandbox Code Playgroud)

在 Debian 上,/etc/bash.bashrc有:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return
Run Code Online (Sandbox Code Playgroud)

并且/etc/skel/.bashrc

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac
Run Code Online (Sandbox Code Playgroud)

man bash然而,根据,非交互式 shell 甚至不读取这些文件:

   When  bash  is  started  non-interactively,  to run a shell script, for
   example, it looks for the variable …
Run Code Online (Sandbox Code Playgroud)

bash bashrc

79
推荐指数
3
解决办法
2万
查看次数

使用 systemd 配置 java 守护进程

我将这个定义用于systemd工作:

 [Unit]
 Description=Some job

 [Service]
 ExecStart=/usr/local/sbin/somejob
 User=dlt
 Type=forking

 [Install]
 WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

脚本调用如下(调用一个简单的例程,侦听 tcpip 套接字并将输入附加到文件):

 #!/bin/sh

 cd /home/user/tmp/testout
 nohup java -jar /home/user/programming/tests/java/core/SocketTest/SocketTest.jar </dev/null >/dev/null &
Run Code Online (Sandbox Code Playgroud)

之后systemctl start somejob的过程显示为下运行,同时init作为其父:

 user@CANTANDO ~$ ps -u dlt eo pid,ppid,command
   PID  PPID COMMAND
  8718     1 java -jar /home/user/programming/tests/java/core/SocketTest/SocketTest.jar
Run Code Online (Sandbox Code Playgroud)

执行systemctl stop somejob该过程后不再显示(并且端口已关闭)。

所以一切看起来都很好

我的问题是:这是运行 java 守护进程的可接受的解决方案systemd,还是有警告,以及其他更稳定或安全的方法来实现这一目标?

java systemd daemon

12
推荐指数
1
解决办法
2万
查看次数

标签 统计

bash ×1

bashrc ×1

daemon ×1

java ×1

systemd ×1