ä¸ç§ä»¥ .service ç»å°¾çåå
ï¼unitï¼é
ç½®æ件ï¼ç¨äºæ§å¶ç± systemd æ§å¶æçè§çè¿ç¨ãç®å说ï¼ç¨äºåå°ä»¥å®æ¤ç²¾çµï¼daemonï¼çå½¢å¼è¿è¡ç¨åºã
ç¼å Systemd service
åºæ¬ç»æ
Systemd æå¡çå
容主è¦å为ä¸ä¸ªé¨åï¼æ§å¶åå
ï¼unitï¼çå®ä¹ãæå¡ï¼serviceï¼çå®ä¹ã以åå®è£
é¨åã
å SysV init èæ¬çå·®å¼
è¿å»ï¼*nix æå¡ï¼å®æ¤ç²¾çµï¼é½æ¯ç¨ SysV å¯å¨èæ¬å¯å¨çãSysV å¯å¨èæ¬å°±æ¯ Bash èæ¬ï¼éå¸¸å¨ /etc/init.d ç®å½ä¸ï¼å¯ä»¥è¢«ä¸äºæ ååæ°å¦ startï¼stopï¼restart çè°ç¨ãå¯å¨è¯¥èæ¬é常æå³çå¯å¨ä¸ä¸ªåå°å®æ¤ç²¾çµï¼daemonï¼ãshell èæ¬å¸¸è§ç缺ç¹å°±æ¯ï¼æ
¢ãå¯è¯»æ§ä¸å¼ºã太详ç»åå¾å²å¨ãè½ç¶å®ä»¬å¾çµæ´»ï¼æ¯ç«é£å°±æ¯ä»£ç åï¼ï¼ä½æ¯æäºäºåªç¨èæ¬åè¿æ¯æ¾å¾å¤ªå°é¾äºï¼æ¯å¦å®æ并åæ§è¡ãæ£ç¡®çè§è¿ç¨ï¼æè
é
置详ç»æ§è¡ç¯å¢ã
SysV å¯å¨èæ¬è¿æä¸ä¸ªç¡¬ä¼¤å°±æ¯ï¼èè¿ï¼éå¤ä»£ç 太å¤ãå 为ä¸è¿°çâæ ååæ°âå¿
é¡»è¦é å个èæ¬æ¥å®ç°ï¼èä¸å个èæ¬ä¹é´çå®ç°é½å·®ä¸å¤ï¼æ ¹æ¬å°±æ¯ä»ä¸ä¸ª skeleton 骨æ¶æ¥çï¼ãè Systemd åè¿è¡äºç»ä¸å®ç°ï¼ä¹å°±æ¯è¯´å¨ Systemd service ä¸å®å
¨å°±ä¸éè¦ãä¹çä¸å°è¿é¨åå
容ãè¿ä½¿å¾ Systemd æå¡é常ç®ææ读ï¼ä¾å¦ NetworkManager è¿ä¸éé级ç¨åºçæå¡ï¼ç®ä¸æ³¨éä¸å
±ææ 19 è¡ãèå®ç¸åºç SysV å¯å¨èæ¬å¤´ 100 è¡è¿æ ååæ°é½æ²¡å®ç°å®ã
Systemd å
¼å®¹ Sysv å¯å¨èæ¬ï¼è¿ä¹æ¯ä¸ºä»ä¹è¿ä¹ä¹
æ们ä»ç¶éè¦ä¸ä¸ª systemd-sysvinit 软件å
çåå ãä½æ¯æ ¹æ®ä»¥ä¸çç±ï¼æ好é对æææ¨å®è£
çå®æ¤ç²¾çµé½ä½¿ç¨åç Systemd æå¡æ¥å¯å¨ãå¦å¤ï¼Systemd æå¡å¯æ ç¼ç¨äºææä½¿ç¨ Systemd çåè¡çï¼æææ¯ Arch ä¸ç¼åçèæ¬æ¿è¿æ¥ä¾ç¶è½å¤ä½¿ç¨ã
é常æ¥è¯´ï¼ä¸æ¸¸åºè¯¥å¨åå¸æºä»£ç çåæ¶åå¸ Systemd æå¡ï¼ä½å¦æ没åå¸ï¼ä½ å¯ä»¥å¯¹ç
§æ¬æå¦æ¥ä¸ºå®ä»¬åä¸ä¸ªå¹¶è´¡ç®ç»å®ä»¬ã
Systemd è¯æ³
Systemd è¯æ³å .desktop æ件çè¯æ³æ¯è¾åï¼ä¹æ¯è¾ç±»ä¼¼ Windows ä¸ç .ini æ件ï¼å æ¤æ 论对äºæå
è
è¿æ¯æç»ç¨æ·é½æ¯é常容æä¸æçã
主è¦æ ¼å¼è¯·è§ä¸é¢çå°ä¾åï¼è¿ééè¦è¯´æä¸ç¹ï¼
Systemd åå
æ件ä¸ç以 â#â å¼å¤´çè¡åé¢çå
容ä¼è¢«è®¤ä¸ºæ¯æ³¨é
Systemd ä¸çå¸å°å¼ï¼1ãyesãonãtrue é½æ¯å¼å¯ï¼0ãnoãoffãfalse é½æ¯å
³éã注ï¼
ä»
éäº Systemd æ件ï¼æ¯å¦ï¼
RemainOnExit=yes
并ä¸éç¨äºè¯¥æ件ä¸åµå
¥ç shell è¯å¥ï¼æ¯å¦ï¼
ExecStartPre=/usr/bin/test "x${NETWORKMANAGER}" = xyes
è¿éç yes å°±ä¸è½æ¿æ¢ãå 为çå·åé¢æ¯ä¸æ¡åµå
¥ç shell è¯å¥ã
Systemd ä¸çæ¶é´åä½é»è®¤æ¯ç§ï¼æ以è¦ç¨æ¯«ç§ï¼msï¼åéï¼mï¼ç请æ¾å¼è¯´æã
ä¸ä¸ªå°ä¾å
NetworkManager ç Systemd serviceï¼
[Unit]
Description=Network Manager
After=syslog.target
Wants=remote-fs.target network.target
[Service]
Type=dbus
BusName=org.freedesktop.NetworkManager
ExecStart=/usr/sbin/NetworkManager --no-daemon
EnvironmentFile=/etc/sysconfig/network/config
ExecStartPre=/usr/bin/test "x${NETWORKMANAGER}" = xyes
# Suppress stderr to eliminate duplicated messages in syslog. NM calls openlog()
# with LOG_PERROR when run in foreground. But systemd redirects stderr to
# syslog by default, which results in logging each message twice.
StandardError=null
[Install]
WantedBy=multi-user.target
Also=NetworkManager-wait-online.service
以ä¸æ们以ç¼å He.net IPv6 åå
æ件为ä¾ã
å®ä¹æ§å¶åå
[Unit]
å¨ Systemd ä¸ï¼ææå¼å¯¼è¿ç¨ä¸ Systemd è¦æ§å¶çä¸è¥¿é½æ¯ä¸ä¸ªåå
ãSystemd åå
ç±»åæï¼
ç³»ç»æå¡
å¥æ¥åï¼socketï¼
设å¤
æè½½ç¹
èªå¨æè½½ç¹
SWAP æ件
ååº
å¯å¨å¯¹è±¡ï¼startup targetï¼
æ件系ç»è·¯å¾
å®æ¶å¨
ç®å说ï¼Systemd æ *nix éé£äºåæ£å¼åå æ¤å®è§çåæä¸å¢æç¢çä¸è¥¿éæ°ç»ä¸å½åäºãåå
åå°±æ¯ä½ åçè¿ä¸ª .service æ件çå称ãä½ä¸åªæ .service åç¼çæ件æå¯ä»¥æ¯ä¸ä¸ªåå
ï¼åå
è¿å¯ä»¥æ .target, .path çåç¼ï¼å
·ä½å¯ä»¥å» /usr/lib/systemd/system ä¸äºè§£ãä½é£ç§åç¼è¦ä¹ç± Systemd ä¸æ¸¸å¼åè
å好é systemd 软件å
ååï¼è¦ä¹ç±æ们ç Base:system å¢éæ·»å ï¼ä¸è¬ç¨æ·æ¯ä¸å¤ªéè¦åå
¶å®åç¼çæ§å¶åå
çã
æ们å
è¦å£°ææ们å¨å®ä¹æ§å¶åå
ï¼
[Unit]
åå
å称就ä¸ç¨åäºï¼æ们è¦åä¸æ¡åå
æè¿°ï¼
[Unit]
Description=Daemon to start He.net IPv6
ä¸é¢æ们è¦è®²è§£ä¸ä¸ Systemd æ¯å¦ä½æ§å¶å个åå
ä¹é´çå
³ç³»çãå®å RPM ç specfile çä¾èµå
³ç³»æ§å¶çè¯æ³é常ç¸ä¼¼ï¼æ¯ç«é½æ¯çº¢å¸½ä¸å®¶çï¼ï¼
Requires: è¿ä¸ªåå
å¯å¨äºï¼é£ä¹å®âéè¦âçåå
ä¹ä¼è¢«å¯å¨; å®âéè¦âçåå
被åæ¢äºï¼å®èªå·±ä¹æ´»ä¸äºãä½æ¯è¯·æ³¨æï¼è¿ä¸ªè®¾å®å¹¶ä¸è½æ§å¶æåå
ä¸å®âéè¦âçåå
çå¯å¨é¡ºåºï¼å¯å¨é¡ºåºæ¯å¦å¤æ§å¶çï¼ï¼å³ Systemd ä¸æ¯å
å¯å¨ Requires åå¯å¨æ¬åå
ï¼èæ¯å¨æ¬åå
被æ¿æ´»æ¶ï¼å¹¶è¡å¯å¨ä¸¤è
ãäºæ¯ä¼äº§çäºå夺ç§çé®é¢ï¼å¦æ Requires å
å¯å¨æåï¼é£ä¹ç大欢å; å¦æ Requires å¯å¨å¾æ
¢ï¼é£æ¬åå
å°±ä¼å¤±è´¥ï¼Systemd 没æèªå¨éè¯ï¼ãæ以为äºç³»ç»çå¥å£®æ§ï¼ä¸å»ºè®®ä½¿ç¨è¿ä¸ªæ è®°ï¼èå»ºè®®ä½¿ç¨ Wants æ è®°ãå¯ä»¥ä½¿ç¨å¤ä¸ª Requiresã
RequiresOverridableï¼è· Requires å¾åãä½æ¯å¦æè¿æ¡æå¡æ¯ç±ç¨æ·æå¨å¯å¨çï¼é£ä¹ RequiresOverridable åé¢çæå¡å³ä½¿å¯å¨ä¸æåä¹ä¸æ¥éãè· Requires æ¯å¢å äºä¸å®å®¹éæ§ï¼ä½æ¯ä½ è¦ç¡®å®ä½ çæå¡æ¯æçå¾
åè½çãå¦å¤ï¼å¦æä¸ç±ç¨æ·æå¨å¯å¨èæ¯éç³»ç»å¼æºå¯å¨ï¼é£ä¹ä¾ç¶ä¼æ Requires é¢ä¸´çé®é¢ã
Requisiteï¼å¼ºå¿çæ¬ç Requiresãè¦æ¯è¿ééè¦çæå¡å¯å¨ä¸æåï¼é£æ¬åå
æ件ä¸ç®¡è½ä¸è½æ£æµçä¸è½çå¾
é½ç«å»å°±ä¼å¤±è´¥ã
Wantsï¼æ¨è使ç¨ãæ¬åå
å¯å¨äºï¼å®âæ³è¦âçåå
ä¹ä¼è¢«å¯å¨ãä½æ¯å¯å¨ä¸æåï¼å¯¹æ¬åå
没æå½±åã
Conflictsï¼ä¸ä¸ªåå
çå¯å¨ä¼åæ¢ä¸å®âå²çªâçåå
ï¼åä¹äº¦ç¶ã注æè¿éååé¢çå¯å¨é¡ºåºæ¯âæ£äº¤âçï¼
两个ç¸äºå²çªçåå
被åæ¶å¯å¨ï¼è¦ä¹ä¸¤ä¸ªé½å¯å¨ä¸äºï¼ä¸¤è
é½æ¯ç¬¬ä¸ä¸ªåå
ç Requiresï¼ï¼è¦ä¹å¯å¨ä¸ä¸ªï¼æä¸ä¸ªæ¯ç¬¬ä¸ä¸ªåå
ç Requiresï¼å¦ä¸ä¸ªä¸æ¯ï¼ï¼ä¸æ¯ Requires çé£ä¸ªä¼è¢«åæ¢ãè¦æ¯ä¸¤è
é½ä¸æ¯ä»»ä½ä¸ä¸ªåå
ç Requiresï¼é£ä¹ Conflicts å«çé£ä¸ªåå
ä¼å
å¯å¨ï¼è¢« Conflicts çåå¯å¨ï¼è¦æ¯äºç¸åäºï¼é£ä¹ä¸¤ä¸ªé½å¯å¨ä¸äºã
OnFailureï¼å¾ææ¾ï¼å¦ææ¬åå
失败äºï¼é£ä¹å¯å¨ä»ä¹åå
ä½ä¸ºæè¡·ã
好äºï¼ç°å¨æ们æ¥æ³è±¡ä¸ä¸ï¼æ们çåå
ï¼Ipv6 é§éï¼åºè¯¥æ³è¦ä»ä¹å¢ï¼å¾æ¾ç¶æ¯ä¸ä¸ªè¿éççç½ç»ãæä¸ä¸ª Systemd é»è®¤æä¾ç对象å«å network-online.targetï¼é»è®¤ç target å表å¯è§ systemd.specialï¼å¿
çï¼å ä¸ºä½ å¤§å¤æ°æ¶å Wants çé½æ¯ä¸ä¸ªåºå®çç³»ç»ç¶æèä¸æ¯å
¶å® systemd æå¡ï¼ï¼æ£æ£å¥½å¥½è½å¤æä¾æ们éè¦çç¯å¢ãäºæ¯ï¼
[Unit]
Description=Daemon to start He.net IPv6
Wants=network-online.target
ä¸é¢æ们éè¦å®ä¹ä¸ä¸æå¡å¯å¨é¡ºåºï¼ä¸ç¶è¿ / ç®å½æå¨ç硬çé½æ²¡æ载就å¼å§å¹²æ´»ï¼ä¸åªå¿æ¾ç¨åºå»åãSystemd æå¡å¯å¨é¡ºåºä¸»è¦ä½¿ç¨ä»¥ä¸ä¸¤ä¸ªæ è®°å®ä¹çï¼
Before/Afterï¼è¦æ¯ä¸ä¸ªæå¡ Before å¦ä¸ä¸ªæå¡ï¼é£ä¹å¨å¹¶è¡å¯å¨æ¶ï¼Systemd æ»æ¯ç¨è¿ç¨ 0 并è¡å¯å¨ææä¸è¥¿ï¼ç¶åéè¿è¿ä¸¤ä¸ªæ è®°æ¥äºæ¬¡çå¾
æåºï¼ï¼é£å¦ä¸ä¸ªæå¡è¿æ¶å°±ä¼çè¿ä¸ªæå¡å
å¯å¨å¹¶è¿åç¶æï¼æ³¨ææ¯å
å¯å¨èä¸æ¯å¯å¨æåï¼å 为失败ä¹æ¯ä¸ç§ç¶æï¼ä¸å®è¦æåæå¯å¨å¦ä¸ä¸ªæå¡æ¯éè¿ä¾èµå
³ç³»å®ä¹çãåä¹ After 亦ç¶ã
ä¸é¢è¯´ä¸âå
³æºâï¼å¯ä»¥æ¯æèµ·ï¼è¿æ¶åæäºæå¡æ¯ä¾ç¶å¨è·çï¼æ¯å¦ç½ç»å¤éï¼æ¶åç顺åºï¼å¦æ两个æå¡é½æ¯è¦å
³æçï¼Before æ¯å
å
³èªå·±ï¼After æ¯å
å
³å«äººï¼è¿å¾å¥½ç解; ä½å¦æä¸ä¸ªæå¡æ¯è¦å
³ï¼èå¦ä¸ä¸ªæ¯è¦å¼çï¼é£ä¹ä¸ç®¡ Before/After åäºä»ä¹ï¼æ»æ¯ä¼å
å
³éèä¸æ¯å¼å§ãä¹å°±æ¯æ¯å¦æå¡ A Before æå¡ Bï¼ä½æ¯æå¡ B æ¯å¨å
³ï¼èæå¡ A æ¯å¨ restartï¼é£ä¹æå¡ B ç顺åºå¨æå¡ A çåé¢ã
好å¦ï¼æ们çåå
åºè¯¥å¨ä»ä¹çååå¯å¨å¢ï¼å®ä¸éè¦ä¸å®å¨ä»ä¹æå¡åé¢è·èµ·æ¥ï¼è¿ä¸å ifup å dhcpï¼ç½ç»èµ·ä¸æ¥è·å ip è¯å®æ²¡ç¨ãæ们åªéè¦æç½å°±å¯ä»¥äºãâæç½âå¨ Systemd ä¸ä¹æ¯ç±ä¸ä¸ªé»è®¤ targetï¼network.target æä¾çï¼äºæ¯æ们çæ§å¶åå
å°±å®ä¹å¥½äºï¼
[Unit]
Description=Daemon to start He.net IPv6
Wants=network-online.target
After=network.target
å®ä¹æå¡æ¬ä½ [service]
å¨å®ä¹å®äº Systemd ç¨æ¥è¯å«æå¡çåå
åï¼æ们æ¥å®ä¹æå¡æ¬ä½ï¼ä¾ç¶æ¯å£°æï¼
[Service]
ç¶åæ¯å£°ææå¡ç±»åï¼
[Service]
Type=
Systemd æ¯æçæå¡ç±»åæ以ä¸å ç±»ï¼
simple é»è®¤ï¼è¿æ¯æç®åçæå¡ç±»åãææå°±æ¯è¯´å¯å¨çç¨åºå°±æ¯ä¸»ä½ç¨åºï¼è¿ä¸ªç¨åºè¦æ¯éåºé£ä¹ä¸åçä¼ãè¿å¨å¾å½¢çé¢éé常好ç解ï¼ææå¼ Amarokï¼éåºå®å°±æ²¡æäºãä½æ¯å½ä»¤è¡ç大é¨åç¨åºé½ä¸ä¼é£ä¹è®¾è®¡ï¼å 为å½ä»¤è¡çä¸ä¸ªæåºæ¬ååå°±æ¯ä¸ä¸ªå¥½çç¨åºä¸è½ç¬å å½ä»¤è¡çªå£ãæ以è¾å
¥å½ä»¤ï¼å车ï¼æ¥ç马ä¸è¿åç»ä½ æ示符ï¼ä½ç¨åºå·²ç»æ§è¡äºãæ以åªæå°æ°ç¨åºæ¯å¦ python xxx.py è¿ä½¿ç¨è¿ç§æ¹å¼ãå¨è¿ç§ç±»åä¸é¢ï¼å¦æä½ ç主ç¨åºæ¯è¦ååºå
¶å®ç¨åºçï¼é£ä¹ä½ çéä¿¡é¢éåºè¯¥å¨å¯å¨æ¬æå¡å就设好ï¼å¥æ¥åçï¼ï¼å æ¤è¿ç§ç±»åçæå¡ï¼Systemd è¿è¡å®åä¼ç«å»å°±è¿è¡ä¸é¢çæå¡ï¼éè¦å®çæå¡ï¼ï¼è¿æ¶æ²¡æå¥æ¥ååé¢çæå¡ä¼å¤±è´¥ï¼å After ä¹æ²¡ç¨ï¼å 为 simple ç±»åä¸åå¨ä¸»è¿ç¨éåºçæ
åµä¹å°±ä¸åå¨æè¿åç¶æçæ
åµï¼æ以å®ä¸æ¦å¯å¨å°±è®¤ä¸ºæ¯æåçï¼é¤é没起æ¥ã
forking æ å Unix Daemon 使ç¨çå¯å¨æ¹å¼ãå¯å¨ç¨åºåä¼è°ç¨ fork() å½æ°ï¼æå¿
è¦çéä¿¡é¢éé½è®¾ç½®å¥½ä¹åç¶è¿ç¨éåºï¼çä¸å®æ¤ç²¾çµçåè¿ç¨ãä½ è¦æ¯ä½¿ç¨çè¿ç§æ¹å¼ï¼æ好ä¹æå®ä¸ PIDFILE=ï¼ä¸è¦è®© Systemd å»çï¼éè¦çä¹å¯ä»¥ï¼æ GuessMainPID 设为 yesã
å¤ææ¯ forking è¿æ¯ simple ç±»åé常ç®åï¼å½ä»¤è¡éè¿è¡ä¸ä½ çç¨åºï¼æç»å ç¨å½ä»¤è¡è¦æ Ctrl + C æå¯ä»¥çï¼å°±ä¸ä¼æ¯ forking ç±»åã
å建 PIDFILE æ¯ä½ 为å®åæå¡çç¨åºçä»»å¡èä¸æ¯ Systemd çåè½ï¼çè³ä¹ä¸æ¯ Sysvinit èæ¬çåè½ãåè startprocå建pid fileçé®é¢äºè§£è¿ä¸æ¥çç¥è¯ãå æ¤å¦æä½ çç¨åºç¡®å®æ¯ forking ç±»åï¼ä½å°±æ¯æ²¡å®ç°å建 PIDFILE çåè½ï¼é£ä¹å»ºè®®ä½¿ç¨ ExecStartPost= ç»å shell å½ä»¤æ¥æå¨æåè¿ç¨ç¼å·å¹¶åå° /var/run/xxx.pidã
oneshot 顾åæä¹ï¼æä¸æªæ¢ä¸ä¸ªå°æ¹ãæ以è¿ç§æå¡ç±»åå°±æ¯å¯å¨ï¼å®æï¼æ²¡è¿ç¨äºã常è§æ¯å¦ä½ 设置ç½ç»ï¼ifup eth0 upï¼å°±æ¯ä¸æ¬¡æ§çï¼ä¸åå¨ ifup çåè¿ç¨ï¼forking é£æ ·ï¼ï¼ä¹ä¸åå¨ä¸»è¿ç¨ï¼simple é£æ ·ï¼ï¼å®è¿è¡å®æå便äºæ ç迹ãå 为è¿ç±»æå¡è¿è¡å®å°±æ²¡è¿ç¨äºï¼æ们ç»å¸¸ä¼éè¦ RemainAfterExit=yesãåé¢é
ç½®çæææ¯è¯´ï¼å³ä½¿æ²¡è¿ç¨äºï¼æ们ä¹è¦ Systemd 认为该æå¡æ¯åå¨å¹¶æåäºçãæ以å¦æä½ æä¸ä¸ªè¿æ ·çæå¡ï¼æå¡å¯å¨åï¼ä½ åå» ifup eth0 upï¼è¿æ¶ä½ åçæå¡ï¼ä¾ç¶æ¾ç¤ºæ¯ running çãå 为åªè¦å¨æ§è¡é£æ¡ä¸æ¬¡æ§å½ä»¤çæ¶å没åºéï¼é£ä¹å®å°±æ°¸è¿è®¤ä¸ºå®æ¯æå并ä¸ç´åå¨çï¼ç´å°ä½ å
³éæå¡ã
dbus è¿ä¸ªç¨åºå¯å¨æ¶éè¦è·åä¸å DBus 空é´ï¼æ以éè¦å BusName= ä¸èµ·ç¨ãåªæå®æåè·å¾äº DBus 空é´ï¼ä¾èµå®çç¨åºæä¼è¢«å¯å¨ã
ä¸è¬äººä¹å°±è½ç¨å°ä¸é¢å个ï¼è¿æ两ç§å°è§çç±»åï¼
notify è¿ä¸ªç¨åºå¨å¯å¨å®æåä¼éè¿ sd_notify åéä¸ä¸ªéç¥æ¶æ¯ãæ以è¿éè¦é
å NotifyAccess æ¥è®© Systemd æ¥æ¶æ¶æ¯ï¼åè
æä¸ä¸ªçº§å«ï¼noneï¼æææ¶æ¯é½å¿½ç¥æ; mainï¼åªæ¥åæ们ç¨åºç主è¿ç¨åè¿å»çæ¶æ¯; allï¼æ们ç¨åºçææè¿ç¨åè¿å»çæ¶æ¯é½ç®ãNotifyAccess è¦æ¯ä¸åçè¯é»è®¤æ¯ mainã
idle è¿ä¸ªç¨åºè¦çå®éé¢è°åº¦çå
¨é¨å
¶å®ä¸è¥¿é½è·å®æä¼è·å®èªå·±ãæ¯å¦ä½ ExecStart çæ¯ä¸ª shell èæ¬ï¼éé¢å¯è½è·äºä¸äºå«çä¸è¥¿ï¼å¦æä¸è¿æ ·çè¯ï¼é£å¾å¯è½å«çä¸è¥¿çæ§å¶å°è¾åºéä¼å¤ä¸ä¸ªâå¯å¨æåâè¿æ ·ç Systemd æ¶æ¯ã
ç±äº He.net ç IPv6 æ¯ç¨ iproute2 ç ip å½ä»¤æ¥å¼çï¼æ以æ¯ä¸ä¸ª oneshot ä¸æ¬¡æ§æå¡ã
[Service]
Type=oneshot
RemainAfterExit=yes
æ¥ä¸æ¥è¦è®¾ç½® ExecStart, ExecStopãå¦æç¨åºæ¯æçè¯ï¼ä½ è¿å¯ä»¥å»è®¾ç½® ExecReloadï¼Restart çã注æï¼è¿é设置çæ¯å®ä»¬ Reload/Restart çæ¹å¼ï¼ä½å¹¶ä¸ä»£è¡¨æ²¡æå®ä»¬ Systemd å°±ä¸è½å®ææ¯å¦ systemctl restart xxx.service è¿æ ·çä»»å¡ï¼ç¨åºææ¯æèªç¶æ好ï¼ç¨åºä¸æ¯æé£å°±å
stop å start å¯ãåæ ·æç¹æ®è¦æ±çæ¶åä½ ä¹å¯ä»¥å»è®¾ç½®æ¯å¦ ExecStartPre/ExecStartPost,RestartSec,TimeoutSec çå
¶å®ä¸è¥¿ï¼åèé¾æ¥éé½æ使ç¨æ¹æ³ã
è¿éè¦ç¹æ®è®²ä¸ä¸ ExecStartï¼
å¦æä½ æå¡çç±»åä¸æ¯ oneshotï¼é£ä¹å®åªå¯ä»¥æ¥åä¸ä¸ªå½ä»¤ï¼åæ°ä¸éï¼æ¯å¦ä½ å
ip tunnel create å ip tunnel0 upï¼é£æ¯ä¸¤ä¸ª ip å½ä»¤ï¼å¦æä½ ä¸æ¯ oneshot ç±»åè¿æ ·æ¯ä¸è¡çã
å¦ææå¤æ¡å½ä»¤ï¼oneshot ç±»åï¼ï¼å½ä»¤ä¹é´ä»¥åå· ; åéï¼è·¨è¡å¯ç¨åææ \ã
é¤éä½ çæå¡ç±»åæ¯ forkingï¼å¦åä½ å¨è¿éè¾å
¥çå½ä»¤é½ä¼è¢«è®¤ä¸ºæ¯ä¸»è¿ç¨ï¼ä¸ç®¡å®æ¯ä¸æ¯ã
äºæ¯æ们ç [Service] å°±å好äºï¼
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/ip tunnel add he-ipv6 mode sit remote 66.220.18.42 local 108.170.7.158 ttl 255 ; \
/usr/sbin/ip link set he-ipv6 up ; \
/usr/sbin/ip addr add 2001:470:c:1184::2/64 dev he-ipv6 ; \
/usr/sbin/ip route add ::/0 dev he-ipv6 ; \
/usr/sbin/ip -6 addr
ExecStop=/usr/sbin/ip route delete ::/0 dev he-ipv6 ; \
/usr/sbin/ip -6 addr del 2001:470:c:1184::2/64 dev he-ipv6 ; \
/usr/sbin/ip link set he-ipv6 down ; \
/usr/sbin/ip tunnel del he-ipv6
å®è£
æå¡ [install]
è¿å¯è½æç¹ç»ï¼ææå¡æ件é½å¼å¥½äºï¼æ¾å° /etc/systemd/systemï¼ä¾ç³»ç»ç®¡çååç¨æ·ä½¿ç¨ï¼ï¼/usr/lib/systemd/systemï¼ä¾åè¡çæå
è
使ç¨ï¼äºï¼ä¸å°±æ¯å®è£
好äºåã
è¿é说çæ¯ä¸ç§å
é¨ç¶æï¼é»è®¤ä½ æ¾å¯¹ä½ç½®å®æ¾ç¤ºçæ¯ disabledï¼unloadedï¼æ以æ们è¦å¨ Systemd å
é¨å¯¹å®è¿è¡ä¸ä¸ loadï¼æ²¡äººè¦çä¸è¥¿æ¯ä¸éè¦å®è£
çï¼æ们ä¸æ¶æ¸£æ¸£ï¼ï¼æ以æ们è¦åè¯ Systemd å®æ¯æ人è¦çï¼è¢«è°è¦ãä¸è¬é½æ¯è¢«
[Install]
WantedBy=multi-user.target
è¦ï¼multi-user.target 表示å¤ç¨æ·ç³»ç»å¥½äºï¼ç®åç解就æ¯ä½ å¯ä»¥ç»å
¥äºï¼ãè¿æ ·å¨ multi-user.target å¯ç¨æ¶ï¼æ们çæå¡ä¹å°±ä¼è¢«å¯ç¨äºã
[Install] é¨åä¸é¤äº WantedBy è¿æ两ç§å±æ§ï¼åå«æ¯ï¼
Alias= ç»ä½ èªå·±çå«åï¼è¿æ · systemctl command xxx.service çæ¶åå°±å¯ä»¥ä¸è¾å
¥å®æ´çåå
å称ãæ¯å¦ä½ ç» NetworkManager ä¸ä¸ªå«åå« Alias=nmï¼é£ä½ å°±å¯ä»¥ systemctl status nm.service æ¥çå®é
æ¯ NetworkManager.service çæå¡äºã
Also= å®è£
æ¬æå¡çæ¶åè¿è¦å®è£
å«çä»ä¹æå¡ãæ¯å¦æ们ç He.net èæ¬æçåºè¯¥éè¦ä¸ä¸ª iproute2.service ä½ä¸º alsoï¼ä½æ¯ iproute2 å®é
ä¸ä¸éè¦ systemd æ§å¶ï¼æ以就没åãå®å [Unit] å®ä¹éé¢çä¾èµå
³ç³»ç¸æ¯ï¼å®ç®¡ççä¸æ¯è¿è¡æ¶ä¾èµï¼èæ¯å®è£
æ¶ãå®è£
好äºä¹åå¯å¨è°å
è°åï¼è°ä¾èµè°ï¼å Also= é½æ²¡æå
³ç³»ã
温馨提示:答案为网友推荐,仅供参考