Score:0

nginx: unrecognized service after upgrading Nginx on Ubuntu 18.04

ธง eg

I removed the default Nginx package from my server, and compiled it from source here. There is a script on the server that checks Nginx, and reports any problem:

if ($result->num_rows > 0) {
    exec('sudo service nginx configtest 2>&1', $output, $returnCode);
    if ($returnCode === 0) {
        passthru('sudo service nginx restart');
    } else {
        $subject = 'Nginx config test failed on ' .gethostname();
        $message = implode('<br>', $output);
        Mail::sendEmail('it_staff@mydomain.com', $subject, $message);
    }
}

When running service nginx configtest I get:

nginx: unrecognized service

However, running nginx -t returns:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Am I missing a configuration somewhere that I'm unaware of? Nginx is working, but it's saying it's an unrecognized service.

I created a systemd unit file with the following:

[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

I also enabled and started Nginx:

sudo systemctl enable nginx.service
sudo systemctl start nginx.service

Nginx is running, and I can hit web sites using this server. What could I be missing? Thanks.

Score:1
ธง ru

เก่า บริการ มีการโทรสำหรับโปรแกรม 'ดั้งเดิม' แต่ จิงซ์ เป็นหน่วย SystemD ไม่ใช่บริการ SysVInit/Upstart เดิม

บริการ nginx configtest คือ (โดยทั่วไปถือว่า) 'คัดค้าน' ในความโปรดปรานของตรง sudo nginx -t คำสั่งเพื่อทดสอบการกำหนดค่าในปัจจุบันและคุณควรดำเนินการด้วย sudo nginx -t เป็นเป้าหมายของคุณสำหรับการทดสอบการกำหนดค่า พึ่งได้เท่านั้น บริการ / systemctl สำหรับการหยุด เริ่มต้น และโหลดบริการใหม่ อย่าพึ่งพาพารามิเตอร์ 'configtest' อีกต่อไป

(ในการแชท nginx IRC บน Freenode ตอนนี้ LiberaChat เรามักจะผลักดันให้ผู้คนใช้ sudo nginx -t สำหรับการทดสอบการกำหนดค่าและ sudo nginx -T เพื่อทิ้งการกำหนดค่าในรูปแบบที่อ่านได้ทั้งหมดสำหรับการดีบัก ดังนั้นนี่คือ 'มาตรฐาน' ที่ฉันใช้เนื่องจากฟอรัม nginx ใช้สัญลักษณ์นี้มากกว่าการเรียกใช้บริการด้วย)

DevOpsSauce avatar
eg flag
ขอขอบคุณ. ดูเหมือนว่าฉันจะต้องทำรหัสยืนยันเพื่อเปลี่ยนไวยากรณ์ของการตรวจสอบนั้น แก้ไขง่ายๆ :)
DevOpsSauce avatar
eg flag
คำถาม: ฉันจะค้นหาเอกสารที่ `configtest` ใช้งานไม่ได้แล้วได้ที่ไหน ฉันไม่สามารถหาได้จากทุกที่ แม้ว่าจะพยายามค้นหาผ่านเอกสาร Nginx ด้วยตนเองก็ตาม
ru flag
@DevOpsSauce เป็นเพียงความรู้ทั่วไปในโลก nginx ไม่มีการบันทึกไว้ในเอกสาร nginx แต่โดยรวมแล้ว `บริการ nginx ...` เป็นกลไก SysVInit / Upstart ที่เลิกใช้แล้วซึ่งไม่ได้แปลโดยตรงไปยังโลกของ SystemD ของ nginx โดยปกติจะแนะนำว่าสำหรับ NGINX การเรียกใช้ `sudo nginx -t` เป็นวิธีเรียกใช้การทดสอบการกำหนดค่า เนื่องจากเป็นการเริ่มต้นระบบโดยไม่ขึ้นกับระบบทั้งหมด ซึ่งหมายความว่าทำงานได้กับการกระจายและระบบเริ่มต้นทั้งหมดที่ยังมีอยู่
DevOpsSauce avatar
eg flag
ขอบคุณมากสำหรับคำอธิบาย
ru flag
ยินดีต้อนรับ ฉันได้เพิ่มคำชี้แจงเกี่ยวกับเรื่องนี้รวมถึงคำตอบของฉันว่าทำไมโดยทั่วไปจึงถือว่า 'เลิกใช้แล้ว' เพื่อสนับสนุนวิธีการเริ่มต้นแบบไม่เชื่อเรื่องพระเจ้าของระบบเพื่อทริกเกอร์การทดสอบเดียวกัน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา