ನಾವು ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ ನಿಲ್ಲಿಸಿದ್ದ ಸೇವೆಗಳನ್ನು ನಮ್ಮ ವಾಚ್ಡಾಗ್ ಮರುಪ್ರಾರಂಭಿಸಿತು
ಆಪ್ಸ್
ನಮ್ಮ ವಾಚ್ಡಾಗ್ಗಳಲ್ಲಿ ಒಂದು, ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದ್ದರೂ (enabled) ಕಾರ್ಯನಿರ್ವಹಿಸದಿರುವ ನಮ್ಮ ಸೇವೆಗಳನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ. ಅಕ್ಟೋಬರ್ನಲ್ಲಿ ಎರಡು ಬಾರಿ, ನಾವು ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ ನಿಲ್ಲಿಸಿದ್ದ ಸೇವೆಗಳನ್ನು ಅದು ಪ್ರಾರಂಭಿಸಿತು. ಎರಡನೇ ಬಾರಿ, ನಮ್ಮ ಒಂದು ಸೈಟ್ಗೆ ಭೇಟಿ ನೀಡಿದವರಿಗೆ ಸುಮಾರು 45 ನಿಮಿಷಗಳ ಕಾಲ ದೋಷಗಳು ಕಾಣಿಸಿಕೊಂಡವು.
ಆ ವಾಚ್ಡಾಗ್ ಏಕೆ ಇದೆ
ಉದಾಹರಣೆಗೆ ಹೆಸರಿನ ಮೂಲಕ ಯಾರಾದರೂ ಅದನ್ನು ಕೊಂದರೆ, SIGTERM ಸಿಗ್ನಲ್ ಪಡೆದು ಸ್ವಚ್ಛವಾಗಿ ನಿರ್ಗಮಿಸುವ ಸೇವೆಯು systemd ನ ದೃಷ್ಟಿಯಿಂದ "ವಿಫಲ" (failed) ಆಗಿರುವುದಿಲ್ಲ. Restart=on-failure ಅದನ್ನು ಮರುಪಡೆಯುವುದಿಲ್ಲ, ಮತ್ತು systemctl --failed ಅದನ್ನು ಪಟ್ಟಿ ಮಾಡುವುದಿಲ್ಲ. ಯಾರಾದರೂ ಗಮನಿಸುವವರೆಗೆ ಅದು ಕೆಳಗೆ ಇರುತ್ತದೆ. ಆದ್ದರಿಂದ ವಾಚ್ಡಾಗ್ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದ್ದರೂ ಕಾರ್ಯನಿರ್ವಹಿಸದಿರುವ ಸೇವೆಗಳನ್ನು ಹುಡುಕಿ ಅವುಗಳನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ.
ಸಮಸ್ಯೆ ಎಂದರೆ, ನೀವು ಕೈಯಾರೆ ನಿಲ್ಲಿಸಿದ ಸೇವೆಯು ನಿಖರವಾಗಿ ಹಾಗೆಯೇ ಕಾಣುತ್ತದೆ.
ಮೊದಲ ಬಾರಿ
7 ಅಕ್ಟೋಬರ್ನಲ್ಲಿ, ನಾವು 12:47 ಕ್ಕೆ ಅದರ ಜಾಬ್ ಕ್ಯೂ ಅನ್ನು ಸಂಪಾದಿಸಲು systemctl stop ಬಳಸಿ ಒಂದು ವೀಡಿಯೊ ವರ್ಕರ್ ಅನ್ನು ನಿಲ್ಲಿಸಿದೆವು. 12:55 ಕ್ಕೆ ಅದು ಮತ್ತೆ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತಿತ್ತು: ವಾಚ್ಡಾಗ್ ಅದನ್ನು ಪ್ರಾರಂಭಿಸಿತ್ತು.
ಎರಡನೇ ಬಾರಿ
21 ಅಕ್ಟೋಬರ್ನಲ್ಲಿ, ನಮ್ಮ ಎರಡು ಸೈಟ್ಗಳಿಗೂ ಸೇವೆ ನೀಡುವ ಯಂತ್ರದ ಮೆಮೊರಿಯನ್ನು ನಮಗೆ ಮಾದರಿ ಪರೀಕ್ಷೆಗಾಗಿ ಬೇಕಾಗಿತ್ತು. ಒಂದು ಸ್ಕ್ರಿಪ್ಟ್ ಸೈಟ್ಗಳ ವೆಬ್ ಆ್ಯಪ್ಗಳು, ಒಂದು ಸಿಂಕ್ ಜಾಬ್ ಮತ್ತು ಒಂದು ಡೇಟಾಬೇಸ್ ಕಂಟೇನರ್ ಅನ್ನು, ಮತ್ತೆ systemctl stop ಬಳಸಿ ನಿಲ್ಲಿಸಿತು. ಸುಮಾರು ಐದು ನಿಮಿಷಗಳ ನಂತರ ಸೈಟ್ಗಳನ್ನು ಗಮನಿಸುವ ಒಂದು ಟೈಮರ್, ಮತ್ತು 19:14 ಕ್ಕೆ ವಾಚ್ಡಾಗ್, ಟನೆಲ್ ಮತ್ತು ವೆಬ್ ಆ್ಯಪ್ಗಳನ್ನು ಮರುಪಡೆದವು.
ಟನೆಲ್ ಮತ್ತೆ ಟ್ರಾಫಿಕ್ ಅನ್ನು ಸ್ವೀಕರಿಸಿತು, ಆದರೆ ವೆಬ್ ಆ್ಯಪ್ಗಳು ಉತ್ತರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ: ಪರೀಕ್ಷೆಯಲ್ಲಿದ್ದ ಮಾದರಿಯು ಯಂತ್ರದ ಮೆಮೊರಿಯಲ್ಲಿ 114 GiB ಅನ್ನು ಹಿಡಿದಿಟ್ಟುಕೊಂಡಿತ್ತು. ಸುಮಾರು 19:14 ರಿಂದ 20:00 ರವರೆಗೆ, ಕೆಲವು ಭೇಟಿಗಾರರಿಗೆ 502 ದೋಷಗಳು ಕಾಣಿಸಿಕೊಂಡವು. 20:00 ಕ್ಕೆ ನಾವು ಟನೆಲ್, ವೆಬ್ ಆ್ಯಪ್ಗಳು ಮತ್ತು ಸಿಂಕ್ ಜಾಬ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದೆವು, ಮತ್ತು ವಾಚ್ ಟೈಮರ್ ಅನ್ನು ನಿಲ್ಲಿಸಿದೆವು.
ನಾವು ಈಗ ಬಳಸುವ ನಿಯಮ
- ಒಂದು ಸೇವೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವ ಮೂಲಕ ವಿರಾಮಗೊಳಿಸಿ:
sudo systemctl disable --now <unit>.sudo systemctl enable --now <unit>ಬಳಸಿ ಅದನ್ನು ಮರುಪಡೆಯಿರಿ. ನಮ್ಮ ವಾಚ್ಡಾಗ್ ಸಕ್ರಿಯಗೊಳಿಸಲಾದ ಸೇವೆಗಳನ್ನು ಮಾತ್ರ ಗಮನಿಸುತ್ತದೆ, ಆದ್ದರಿಂದ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾದ ಸೇವೆಯನ್ನು ಅದು ಬಿಟ್ಟುಬಿಡುತ್ತದೆ. - ಅದನ್ನು ಮರುಪಡೆಯಬಹುದಾದ ಎಲ್ಲವನ್ನೂ ವಿರಾಮಗೊಳಿಸಿ: ಅದರ ಮುಂದಿನ ಟನೆಲ್ ಮತ್ತು ಅದನ್ನು ಗಮನಿಸುವ ಯಾವುದೇ ಟೈಮರ್.
- ಸಣ್ಣ ವಿರಾಮವು ಒಂದು ಸ್ಪರ್ಧೆಯಾಗಿದೆ. ನೀವು ಕೇವಲ
stopಬಳಸಿದರೆ, ಮುಂದಿನ ಪರಿಶೀಲನೆಗೂ ಮುನ್ನ ಮುಗಿಸಿ, ನಮ್ಮ ಯಂತ್ರಗಳಲ್ಲಿ ಅದು ನಿಮಿಷಗಳ ಒಳಗೆ ಬರುತ್ತದೆ.
ಅದೇ ತಿಂಗಳುಗಳಿಂದ ಇನ್ನೂ ಎರಡು systemd ಬಲೆಗಳು
/etc/systemd/systemನಲ್ಲಿರುವ ಯೂನಿಟ್ ಫೈಲ್ಗೆsystemctl mask --runtimeಏನೂ ಮಾಡುವುದಿಲ್ಲ./etcನಲ್ಲಿರುವ ಯೂನಿಟ್ಗಳು/runನಲ್ಲಿರುವ ರನ್ಟೈಮ್ ಮಾಸ್ಕ್ಗಿಂತ ಹೆಚ್ಚಿನ ಆದ್ಯತೆ ಪಡೆಯುತ್ತವೆ, ಆದ್ದರಿಂದ ಕಮಾಂಡ್ ಯಶಸ್ವಿಯಾಗುತ್ತದೆ ಮತ್ತು ಸರ್ವಿಸ್ ಇನ್ನೂ ಪ್ರಾರಂಭವಾಗುತ್ತದೆ. ಸರ್ವಿಸ್ ಅನ್ನು ತಡೆಹಿಡಿಯಲು, ನಾವುConditionPathExists=!/etc/<name>.holdಇರುವ ಡ್ರಾಪ್-ಇನ್ ಅನ್ನು ಬಳಸುತ್ತೇವೆ: ಆ ಫೈಲ್ ಇರುವಾಗ, ಸರ್ವಿಸ್ ಪ್ರಾರಂಭವಾಗುವುದಿಲ್ಲ, ಬೂಟ್ ಸಮಯದಲ್ಲೂ ಅಥವಾ ಕೈಯಿಂದಲೂ ಅಲ್ಲ.systemctl is-activeಚಾಲನೆಯಲ್ಲಿರುವ oneshot ಸೇವೆಯನ್ನು inactive ಎಂದು ಕರೆಯುತ್ತದೆ.Type=oneshotಸೇವೆ ಚಾಲನೆಯಲ್ಲಿರುವಾಗ, ಅದರ ಸ್ಥಿತಿ "activating" ಆಗಿರುತ್ತದೆ, ಆದ್ದರಿಂದis-activeಅದನ್ನು ಮುದ್ರಿಸುತ್ತದೆ ಮತ್ತು 3 ಅನ್ನು ರಿಟರ್ನ್ ಮಾಡುತ್ತದೆ. ರಾತ್ರಿ ಜಾಬ್ಗಾಗಿ ಕಾಯಲು ಉದ್ದೇಶಿಸಲಾದwhile systemctl is-active --quiet job.service; do sleep 60; doneನಂತಹ ಲೂಪ್ ತಕ್ಷಣ ನಿಲ್ಲುತ್ತದೆ. ಬದಲಾಗಿ ಸ್ಥಿತಿಯನ್ನು ಓದಿ: active, activating, reloading ಅಥವಾ deactivating ಎಲ್ಲವೂ ಅದು ಇನ್ನೂ ನಡೆಯುತ್ತಿದೆ ಎಂದರ್ಥ.
Factory Floor ಸಕ್ರಿಯಗೊಳಿಸಲಾದ ಆದರೆ ಚಾಲನೆಯಲ್ಲಿಲ್ಲದ ಸೇವೆಗಳನ್ನು ಗಮನಿಸುತ್ತದೆ. ಡೀಫಾಲ್ಟ್ ಆಗಿ ಅದು ಅವುಗಳನ್ನು ವರದಿ ಮಾಡುತ್ತದೆ ಮಾತ್ರ, ಮತ್ತು ನೀವು ಅದನ್ನು ಆನ್ ಮಾಡಿದರೆ ಮಾತ್ರ ಅವುಗಳನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ. ಆವೃತ್ತಿ 1.0.3 ರಿಂದ, ಅದರ ಎಚ್ಚರಿಕೆಯು ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ ಸೇವೆಯನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ನಿಲ್ಲಿಸುವುದು ಹೇಗೆ ಎಂದೂ ಹೇಳುತ್ತದೆ, ಮತ್ತು ಅದರ ರನ್ಬುಕ್ ಕೂಡ ಅದನ್ನೇ ಹೇಳುತ್ತದೆ.