Pazartesi, Kasım 4, 2024

nginx.pid (13: Permission denied) Hatasının Çözümü

yüksek çözünürlüklü nginx logosu

Nginx üzerinde hiçbir değişiklik gerçekleştirmeden rutin kontrollerim sırasında günlüklerde aşağıdaki satırları gördüm.

Google üzerinde elle tutulur herhangi düzgün sonuca ulaşamadığım için direk olarak geliştiricilere ve topluluğa mail attım cevabın gelmesi biraz sürecek lakin ben genede kendi bulduğum ilginç çözümü paylaşmak istiyorum.

2018/06/20 02:02:31 [warn] 24588#24588: the "user" directive makes sense only if the master process runs with super-user privileges, ignored in /etc/nginx/nginx.conf:1
2018/06/20 02:02:31 [emerg] 24588#24588: open() "/run/nginx.pid" failed (13: Permission denied)

Uzunca bir aramadan ve doküman kurcalamadan sonra somut bir sonuca ulaşamadığımdan bahsetmiştim. Bu yüzden gecenin bi vakti aşağıdaki tweeti’de atmaktan çekinmedim.


Belki birileri daha önceden denk gelmiştir. Yardımcı olabilir diye düşündüm. Twitter üzerinden Güray’ın destekleride bu çözüme ulaşmam da etkili oldu. İlk başta sunucuyu yeniden başlatmak iyi gelebilir diye düşündüm sistemde herhangi bir sorun veya yeniden başlatma gerekecek durum olmadığı için direk olarak bunu yapmaktan vazgeçtim.

İşlemlerine ve durumuna bakmam gerekiyordu. Sonuçta permission dediğini biliyordum. Kullanıcı izinleri yada dizinlerle alakalı olduğunu düşündüğüm içinde çalışan işlemde buna bakmalıydım. Hemen aşağıdaki işlemi gerçekleştirdim.

root@v3-main ~ # ps -ef | grep nginx
root      7731     1  0 02:48 ?        00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data  7732  7731  0 02:48 ?        00:00:00 nginx: worker process
www-data  7738  7731  0 02:48 ?        00:00:00 nginx: worker process
www-data  7739  7731  0 02:48 ?        00:00:00 nginx: cache manager process
root      9620 10213  0 02:54 pts/0    00:00:00 grep nginx

Herşey normal gözüktüğünü anlamamız zor olmuyor. Ana işlemimiz kök kullanıcısı ile açıldı bu olağan bir durum. İşçiler ise www-data kullanıcısı ile otomatik oluşturlacaktı. Ayrıca FastCGI Cache için önbellek kontrolüde gene aynı kullanıcı ile çalışması gerekiyordu.

Belki systemd sapıtmıştır güvenlik güncellemesi gelmiştir. Birşeyler olmuştur diye aşağıdaki komutu verdim.

systemctl daemon-reload

Çözüm olmadı tabi olamazda. Hiç değilse daemonları yenilemiş olduk. Gelelim en can alıcı çözümü bana getiren duruma. İlk önce systemd ile işlem yapmayacağız. Eski usüller ile devam edeceğiz. Init bu aşamada bizi kurtardı diyebilirim.

Sırasıyla aşağıdaki işlemleri gerçekleştirdim. Belki geçici bir çözüm belkide kalıcı bilemiyorum. Ancak sorunumu çözdüğü kesin. İlk önce nginx’e ait ne kadar işlem varsa öldürüyorum.

pkill nginx

Bu işlemi yaptıktan sonra haliyle bağlantı kapatılacak, siz servisi çalıştırana kadar gelmeyecek. Bu arada biraz dinlenin ve kendinize bir çay veya kahve koyun. 2-3 Dakikalık bir downtime’dan kimseye bir zarar gelmez. Hemen ardından servisi tekrar çalıştırıyoruz.

sudo /etc/init.d/nginx start

Bu komuttan hemen sonra site kaldığı yerden çalışmaya, ziyaretçilerinize hizmet vermeye devam edecek. Logları tekrar kontrol ettiğimizde ise artık böyle bir durumla karşılaşmadığınızı fark edeceksiniz.