systemctl ਕਹਿੰਦਾ ਹੈ ਕਿ systemd PID 1 ਨਹੀਂ: ਤਾਂ ਫਿਰ ਕੀ?
PID 1 ਵਾਲਾ ਸੁਨੇਹਾ OpenVPN ਬਾਰੇ ਨਹੀਂ, ਵਾਤਾਵਰਨ ਬਾਰੇ ਹੈ। ਦੇਖੋ ਕਿ PID 1 ਵਜੋਂ ਕੀ ਚੱਲ ਰਿਹਾ ਹੈ, ਜਿੱਥੇ ਸਮਰਥਨ ਹੈ ਉੱਥੇ systemd ਸਮਰੱਥ ਕਰੋ, ਅਤੇ ਫਿਰ ਅਸਲੀ ਗਲਤੀ ਪੜ੍ਹੋ।
ਜਦੋਂ systemctl start openvpn-client@office ਚਲਾਇਆ ਜਾਂਦਾ ਹੈ ਅਤੇ ਸਿਸਟਮ systemd ਨਾਲ ਬੂਟ ਨਹੀਂ ਹੋਇਆ ਐਸਾ ਸੁਨੇਹਾ ਆਉਂਦਾ ਹੈ, ਤਾਂ ਇਹ ਸੇਵਾ ਫੇਲ੍ਹ ਹੋਣ ਵਾਂਗ ਲੱਗਦਾ ਹੈ। ਇਹ ਬਿਲਕੁਲ ਸੇਵਾ ਫੇਲ੍ਹ ਨਹੀਂ ਹੈ: ਤੁਸੀਂ ਜਿਸ systemctl ਨੂੰ ਕਾਲ ਕੀਤਾ, ਉਸ ਨੂੰ ਗੱਲ ਕਰਨ ਲਈ ਕੋਈ ਚੱਲਦਾ ਪ੍ਰਬੰਧਕ ਨਹੀਂ ਮਿਲਦਾ, ਇਸ ਲਈ OpenVPN ਬਾਰੇ ਕੁਝ ਵੀ ਜਾਂਚਿਆ ਨਹੀਂ ਗਿਆ। sudo ਪ੍ਰਬੰਧਕ ਨਹੀਂ ਬਣਾਉਂਦਾ, ਅਤੇ unit ਫ਼ਾਈਲ ਸਥਾਪਤ ਕਰਨ ਨਾਲ ਵੀ ਉਹ ਨਹੀਂ ਬਣਦਾ। ਹੁਕਮ ਅਤੇ ਮਸ਼ੀਨ ਦੋ ਵੱਖਰੀਆਂ ਦੁਨੀਆਵਾਂ ਤੋਂ ਆਉਂਦੇ ਹਨ, ਅਤੇ ਗਲਤੀ ਹੀ ਇੱਕੋ-ਇੱਕ ਥਾਂ ਹੈ ਜਿੱਥੇ ਇਹ ਦਿਖਿਆ।
ਪਹਿਲਾਂ ਪੁੱਛੋ ਕਿ ਹੁਕਮ ਜਿੱਥੇ ਚੱਲਦਾ ਹੈ ਉੱਥੇ PID 1 ਕਿਸ ਪ੍ਰਕਿਰਿਆ ਕੋਲ ਹੈ, ਕਿਉਂਕਿ ਇਹੀ ਜਵਾਬ ਤੈਅ ਕਰਦਾ ਹੈ ਕਿ unit ਹਨ ਵੀ ਜਾਂ ਨਹੀਂ।
ਗਲਤੀ OpenVPN ਨਹੀਂ, ਵਾਤਾਵਰਨ ਦਾ ਨਾਮ ਲੈਂਦੀ ਹੈ
systemctl ਕਲਾਇੰਟ ਹੈ, ਪ੍ਰਬੰਧਕ ਨਹੀਂ। ਇਹ socket ਰਾਹੀਂ ਸਿਸਟਮ ਪ੍ਰਬੰਧਕ ਨਾਲ ਜੁੜਦਾ ਹੈ, ਅਤੇ ਜੇ ਦੂਜੇ ਸਿਰੇ 'ਤੇ ਕੋਈ ਪ੍ਰਬੰਧਕ ਨਾ ਹੋਵੇ ਤਾਂ ਉਹੀ ਸੁਨੇਹਾ ਛਾਪਦਾ ਹੈ ਜੋ ਲੋਕ ਫੋਰਮਾਂ ਵਿੱਚ ਚਿਪਕਾਉਂਦੇ ਹਨ। ps -p 1 -o pid=,comm= ਦਿਖਾਉਂਦਾ ਹੈ ਕਿ ਅਸਲ ਵਿੱਚ PID 1 ਵਜੋਂ ਕੀ ਚੱਲ ਰਿਹਾ ਹੈ, ਅਤੇ ਜਵਾਬ ਅਕਸਰ shell, init ਲਿਫ਼ਾਫ਼ਾ ਜਾਂ ਕੰਟੇਨਰ ਦਾ ਆਪਣਾ ਪ੍ਰਵੇਸ਼ ਬਿੰਦੂ ਹੁੰਦਾ ਹੈ। ਅਜਿਹੀ ਸਥਿਤੀ ਵਿੱਚ unit ਫ਼ਾਈਲ ਪੂਰੀ ਤਰ੍ਹਾਂ ਵੈਧ ਹੋ ਸਕਦੀ ਹੈ ਅਤੇ ਫਿਰ ਵੀ ਕਦੇ ਨਹੀਂ ਪੜ੍ਹੀ ਜਾਂਦੀ। ਹੁਕਮ ਨੂੰ root ਵਜੋਂ ਦੁਹਰਾਉਣ ਨਾਲ ਸਿਰਫ਼ ਕਲਾਇੰਟ ਦੇ ਪ੍ਰਮਾਣ ਬਦਲਦੇ ਹਨ।
ਪਹਿਲੀ ਲਾਈਨ ਤੋਂ ਪਹਿਲਾਂ ਪੂਰਾ ਸੁਨੇਹਾ ਪੜ੍ਹੋ। ਪ੍ਰਬੰਧਕ ਵੱਲੋਂ ਆਉਣ ਵਾਲੀ ਗਲਤੀ, ਜਿਵੇਂ ਗੁੰਮ unit ਜਾਂ ਫੇਲ੍ਹ ਸ਼ਰਤ, ਦਾ ਮਤਲਬ ਤੁਸੀਂ ਉਸ ਤੱਕ ਪਹੁੰਚੇ; ਇਸ ਗਲਤੀ ਦਾ ਮਤਲਬ ਹੈ ਨਹੀਂ ਪਹੁੰਚੇ।
WSL: systemd ਸਮਰੱਥ ਕਰਨਾ ਕਨਫ਼ਿਗ ਬਦਲਾਅ ਹੈ
WSL ਨੂੰ ਬਾਅਦ ਦੇ ਸੰਸਕਰਣਾਂ ਵਿੱਚ systemd ਦਾ ਸਮਰਥਨ ਮਿਲਿਆ, ਪਰ ਇਹ ਸੁਵਿਧਾ ਹਰ ਵੰਡ ਲਈ ਵੱਖਰੀ ਸਮਰੱਥ ਹੁੰਦੀ ਹੈ ਅਤੇ ਸਿਰਫ਼ ਉੱਥੇ ਜਿੱਥੇ ਸਥਾਪਤ WSL ਸੰਸਕਰਣ ਇਸਦਾ ਸਮਰਥਨ ਕਰਦਾ ਹੈ। wsl --version Windows ਵਾਲੇ ਪਾਸੇ ਦਿਖਾਉਂਦਾ ਹੈ ਕਿ ਤੁਹਾਡੇ ਕੋਲ ਕੀ ਹੈ, ਅਤੇ ਵੰਡ ਦੀ /etc/wsl.conf ਫ਼ਾਈਲ ਵਿੱਚ [boot] ਭਾਗ ਹੈ, ਜਿਸ ਵਿੱਚ systemd=true ਹੈ। ਪਹਿਲਾਂ ਤੋਂ ਮੌਜੂਦ ਭਾਗ ਹਟਾਏ ਬਿਨਾਂ ਉਹ ਫ਼ਾਈਲ ਸੋਧੋ, ਫਿਰ ਬਦਲਾਅ ਲਾਗੂ ਹੋਣ ਲਈ WSL ਇੰਸਟੈਂਸ ਮੁੜ ਸ਼ੁਰੂ ਕਰੋ। wsl --shutdown ਚੱਲ ਰਹੀ ਹਰ ਵੰਡ ਨੂੰ ਰੋਕਦਾ ਹੈ, ਇਸ ਲਈ ਪਹਿਲਾਂ ਆਪਣਾ ਕੰਮ ਸੰਭਾਲੋ।
ਮੁੜ ਖੋਲ੍ਹਣ ਤੋਂ ਬਾਅਦ, OpenVPN unit ਨੂੰ ਛੂਹਣ ਤੋਂ ਪਹਿਲਾਂ ਪ੍ਰਬੰਧਕ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ: ps -p 1 -o comm= ਦਿਖਾਉਣਾ ਚਾਹੀਦਾ ਹੈ systemd। systemd ਸਮਰੱਥ ਕਰਨ ਨਾਲ ਕੋਈ ਪ੍ਰੋਫ਼ਾਈਲ, ਪ੍ਰਮਾਣ ਜਾਂ ਇੰਸਟੈਂਸ ਨਾਮ ਨਹੀਂ ਮਿਲਦਾ, ਇਸ ਲਈ ਅਗਲੀ ਗਲਤੀ PID 1 ਨਹੀਂ, ਇਹਨਾਂ ਵਿੱਚੋਂ ਇੱਕ ਬਾਰੇ ਹੋਵੇਗੀ।
ਕੰਟੇਨਰ ਆਪਣਾ ਪ੍ਰਵੇਸ਼ ਬਿੰਦੂ ਚਲਾਉਂਦੇ ਹਨ, unit ਨਹੀਂ
ਆਮ ਕੰਟੇਨਰ ਉਹੀ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ ਜੋ ਉਸਦਾ ਪ੍ਰਵੇਸ਼ ਬਿੰਦੂ ਜਾਂ ਹੁਕਮ ਤੈਅ ਕਰਦਾ ਹੈ, ਅਤੇ ਤੁਸੀਂ ਕੋਈ ਵੀ ਪੈਕੇਜ ਸਥਾਪਤ ਕਰੋ, ਇਹ systemd ਨਾਲ ਬੂਟ ਹੋਈ ਮਸ਼ੀਨ ਨਹੀਂ ਹੈ। ਇਮੇਜ ਵਿੱਚ systemctl ਜੋੜਨ ਨਾਲ ਤੁਹਾਨੂੰ ਅਜਿਹਾ ਕਲਾਇੰਟ ਮਿਲਦਾ ਹੈ ਜਿਸ ਕੋਲ ਜੁੜਨ ਲਈ ਕੁਝ ਨਹੀਂ। Community OpenVPN ਲਈ ਸਮਰਥਿਤ ਨਮੂਨਾ ਆਮ ਤੌਰ 'ਤੇ ਅਗਲੇ ਧਰਾਤਲ ਵਿੱਚ ਚੱਲਦੀ ਪ੍ਰਕਿਰਿਆ ਹੈ, openvpn --config /path/to/client.conf, ਜਿਸਨੂੰ ਪ੍ਰਵੇਸ਼ ਬਿੰਦੂ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ ਅਤੇ ਬਾਹਰੋਂ ਨਿਗਰਾਨੀ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਉਹ ਮਾਲਕ ਸ਼ੁਰੂਆਤ, ਸਿਗਨਲ ਅਤੇ ਬੰਦ ਕਰਨਾ ਸੰਭਾਲਦਾ ਹੈ, ਅਤੇ ਟਨਲ ਦਾ ਪ੍ਰਬੰਧ ਕਰਨ ਵਾਲੀ ਇੱਕੋ-ਇੱਕ ਚੀਜ਼ ਉਹੀ ਹੋਣੀ ਚਾਹੀਦੀ ਹੈ।
ਜੋ ਪ੍ਰਵੇਸ਼ ਬਿੰਦੂ ਪਹਿਲਾਂ ਹੀ ਉਸ ਟਨਲ ਦਾ ਪ੍ਰਬੰਧ ਕਰ ਰਿਹਾ ਹੈ, ਉਸਦੇ ਕੋਲ ਕਦੇ ਵੀ ਇੰਟਰਐਕਟਿਵ ਕਾਪੀ ਨਾ ਚਲਾਓ, ਕਿਉਂਕਿ ਦੋ ਪ੍ਰਕਿਰਿਆਵਾਂ ਜੰਤਰ ਅਤੇ ਰਾਹਾਂ ਲਈ ਲੜਨਗੀਆਂ। ਕੰਟੇਨਰ ਦੇ ਅੰਦਰ ਘੱਟੋ-ਘੱਟ init ਪ੍ਰਕਿਰਿਆ ਬੱਚਿਆਂ ਨੂੰ ਇਕੱਠਾ ਕਰਦੀ ਹੈ ਅਤੇ ਸਿਗਨਲ ਅੱਗੇ ਭੇਜਦੀ ਹੈ; ਇਹ ਇਮੇਜ ਨੂੰ unit ਵਾਲਾ ਹੋਸਟ ਨਹੀਂ ਬਣਾਉਂਦੀ।
ਜੇ ਕਿਸੇ ਤੈਨਾਤੀ ਨੂੰ ਸੱਚਮੁੱਚ ਕੰਟੇਨਰ ਦੇ ਅੰਦਰ systemd ਚਾਹੀਦਾ ਹੈ, ਤਾਂ ਉਸ ਲਈ ਜਾਣ-ਬੁੱਝ ਕੇ ਡਿਜ਼ਾਈਨ ਕੀਤਾ ਇਮੇਜ ਚਾਹੀਦਾ ਹੈ, systemctl ਸ਼ਿਕਾਇਤ ਕਰਨਾ ਬੰਦ ਕਰੇ ਤੱਕ ਜੋੜੇ ਜਾਣ ਵਾਲੇ ਵਾਧੂ ਅਧਿਕਾਰ ਨਹੀਂ।
ਪ੍ਰਬੰਧਕ ਹੋਣ 'ਤੇ ਅਗਲੀ ਗਲਤੀ ਪੜ੍ਹੋ
ਜਿਵੇਂ ਹੀ ਅਸਲੀ ਪ੍ਰਬੰਧਕ ਸੇਵਾ ਸ਼ੁਰੂ ਕਰਦਾ ਹੈ, ਲਾਹੇਵੰਦ ਗਲਤੀਆਂ ਸ਼ੁਰੂ ਹੁੰਦੀਆਂ ਹਨ। ਜੰਤਰ ਅਨੁਮਤੀ ਦੀ ਫੇਲ੍ਹ, ਕਨਫ਼ਿਗ ਪਾਰਸਿੰਗ ਦੀ ਗਲਤੀ, ਗੁੰਮ ਪ੍ਰਮਾਣ ਅਤੇ ਪਹੁੰਚ ਤੋਂ ਬਾਹਰ ਸਾਥੀ — ਇਹ ਚਾਰ ਵੱਖਰੀਆਂ ਸਮੱਸਿਆਵਾਂ ਹਨ ਜਿਨ੍ਹਾਂ ਨੂੰ PID 1 ਦੇ ਸੁਨੇਹੇ ਨੇ ਕਦੇ ਨਹੀਂ ਜਾਂਚਿਆ। ਉਹਨਾਂ ਨੂੰ ਉਸੇ ਕ੍ਰਮ ਵਿੱਚ ਪੜ੍ਹੋ ਜਿਸ ਵਿੱਚ unit ਨੇ ਪੈਦਾ ਕੀਤਾ, journalctl -u openvpn-client@office -n 50 ਵਰਤ ਕੇ systemd ਹੋਸਟ 'ਤੇ, ਜਾਂ ਜਿੱਥੇ ਪ੍ਰਬੰਧਕ ਨਹੀਂ ਹੈ ਉੱਥੇ ਕਲਾਇੰਟ ਨੂੰ ਅਗਲੇ ਧਰਾਤਲ ਵਿੱਚ ਚਲਾ ਕੇ। ਅਗਲੇ ਧਰਾਤਲ ਵਿੱਚ ਚਲਾਉਣਾ ਇਹ ਪੁਸ਼ਟੀ ਕਰਨ ਦਾ ਸਭ ਤੋਂ ਤੇਜ਼ ਤਰੀਕਾ ਵੀ ਹੈ ਕਿ ਪ੍ਰੋਫ਼ਾਈਲ ਆਪਣੇ ਆਪ ਕੰਮ ਕਰਦਾ ਹੈ।
ਆਪਣੇ ਨੋਟਾਂ ਵਿੱਚ ਦੋਵੇਂ ਵਾਤਾਵਰਨ ਵੱਖਰੇ ਰੱਖੋ: ਟਨਲ ਚਲਾਉਣ ਵਾਲਾ ਹੋਸਟ, ਅਤੇ ਜਿੱਥੇ ਤੁਸੀਂ ਹੁਕਮ ਟਾਈਪ ਕਰਦੇ ਹੋ।