在配置vnc开机启动的的时候看到官方给的配置文件:
[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target
[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/usr/sbin/runuser -l vismarty -c "/usr/bin/vncserver %i"
PIDFile=/home/vismarty/.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
[Install]
WantedBy=multi-user.target
中,有> /dev/null 2>&1 || :
这样一段话,以前一直不知道为什么要这么写,直到今天自己配了一个ExecStartPre
:
ExecStartPre=/bin/sh -c '/usr/bin/rm /tmp/.X11-unix/X*'
才发现,原来ExecStartPre
执行失败的时候,整个service就会起不来,这样的话,就需要忽略这段代码中的错误部分,所以加入重定向输入> /dev/null 2>&1
同时把错误输入流也重定向,然后加入|| :
,表示这段代码的执行结果,如果||
之前的失败了,要输入出:
这个命令的结果,而冒号命令在shell中就是pass的意思,所以
ExecStartPre=/bin/sh -c '/usr/bin/rm /tmp/.X11-unix/X* > /dev/null 2>&1 || :'
永远都是成功的,这样就能保证ExecStartPre
即使执行失败,也能继续service的启动任务。