ฉันมีสคริปต์นี้ฉันใช้เพื่อตั้งค่างาน CRON เพื่อเรียกใช้สคริปต์นี้เพื่อให้สามารถตรวจสอบว่าบริการ MySQL กำลังทำงานอยู่หรือไม่ ถ้าไม่เช่นนั้นจะเริ่มบริการ MySQL:
#!/bin/bash
service mysql status| grep 'mysql start/running' > /dev/null 2>&1
if [ $? != 0 ]
then
sudo service mysql restart
fi
ฉันมีงานติดตั้ง cron เป็น
sudo crontab -e
แล้วเพิ่ม
*/1 * * * * /home/ubuntu/mysql-check.sh
ปัญหาคือมันรีสตาร์ท MySQL ในทุก ๆ การประมวลผลงาน cron .. แม้ว่าเซิร์ฟเวอร์จะรันมันก็จะเริ่มบริการ MySQL ใหม่สิ่งที่แก้ไขในสคริปต์เพื่อทำเช่นนั้น
[ ... ]
หรือtest <TEST>
ใน Bash พวกเขากำลังเลิกใช้ไวยากรณ์ ใช้[[ ... ]]
แทน เพียงใช้[ ... ]
และ / หรือtest <TEST>
เมื่อ[[ ... ]]
เป็นไม่สามารถใช้ได้
if ! (service mysql status | grep 'mysql start/running' &>/dev/null); then sudo service mysql restart; fi
สิ่งนี้ทำอะไรบ้างมันเริ่มต้นขึ้นที่ subshell หรือไม่ซึ่งservice mysql status | grep 'mysql start/running' &> /dev/null
จะถูกเรียกใช้สถานะ return (exit) ของ subshell ที่กล่าวนั้นจะถูกส่งผ่านไปยัง if-statement ซึ่งจะตรวจสอบว่าไม่ใช่ศูนย์หรือไม่ และถ้ามันเป็นไม่ได้ที่ไม่ใช่ศูนย์แล้วมันวิ่งthen
บล็อก