Articles of error handling

所有服务器的nginx错误位置

是否有可能为所有服务器定义一个公共位置? 从nginx的位置文档我已经看到,位置取决于服务器。 我想要做这样的事情: … http { error_page 404 /error/404.html; error_page 500 501 502 503 504 /error/50x.html; location ^~ /error/ { internal; root /var/www/nginx/errors; } server { … } server { … } … } 我试过设置: http { … root /var/www/nginx/errors; # also with root /var/www/nginx … } 没有成功:总是显示nginx的默认错误页面。

ASP.NET nginx反向代理后面的customErrors

我有一台机器上的端口8080上运行的ASP.NET服务器,并出于性能的原因在端口80上运行的nginxcaching反向代理。请求完成到端口80,然后,如果没有由nginxcaching应答,则传递到本地主机:8080通过nginx proxy_pass指令。 到目前为止,这个设置工作正常,除了ASP.NET的customErrors。 我希望他们是“RemoteOnly”,但由于反向代理所有请求将源自本地,因此是本地的。 我通过nginx传递了X-Real-IP和X-Forwarded-For,但ASP.NET似乎完全忽略了这一点。 任何想法?

nginx 502错误的网关错误。 我的缓冲区应该多大?

我有一个Nginx的服务器,唯一的目的是读取XML并将其放入数据库中。 如果文件很小,比方说100MB一切正常。 但是,如果我试图SimpleXMLELement大约700MB的文件,我得到一个502错误的网关警告。 我读了这个问题,并摆弄下面的设置,但它没有帮助。 我的缓冲区应该更大? 如:700M或什么的? nginx.conf(在http {}中): fastcgi_buffers 128 128k; fastcgi_buffer_size 128k; fastcgi_connect_timeout 3000; fastcgi_send_timeout 3000; fastcgi_read_timeout 3000; 我有ini_set("memory_limit", "-1"); 在我的PHP脚本和php_admin_value[memory_limit] = 2042M在php-fpm.conf [03-Jul-2015 11:53:44] WARNING: [pool www] child 6327 exited on signal 9 (SIGKILL) after 19.047513 seconds from start [03-Jul-2015 12:16:12] WARNING: [pool www] child 6518 exited on signal 9 (SIGKILL) after 23.669892 […]

Nginx,PHP + FPM自定义错误页面

我试图创build一些自定义错误页面,但似乎无法得到500人工作。 我有以下configuration: server { listen 80; root /var/www/devsite; index index.php; server_name devsite; error_page 403 = /error.php?code=403; error_page 404 = /error.php?code=404; error_page 500 = /error.php?code=500; location / { try_files $uri =404; } location ~ \.php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params; } } 起初,我认为这可能是因为它是一个PHP文件,所以我改变了: error_page 500 = /error.php?code=500; 到一个静态页面: error_page 500 /500.html […]

如何获得nginx错误日志中的perl脚本错误(带有FCGIwrap的Nginx)

我只是安装了fcgiwrap和spawn-fcgi以便能够在nginx中使用perl脚本。 我在我的网站configuration中添加了这样的内容: location ~ \.pl$ { gzip off; fastcgi_pass unix:/var/run/fcgiwrap.socket; include fastcgi_params; fastcgi_index index.pl; } 它可以工作,但是如果perl代码中有错误,浏览器会显示以下消息: An error occurred while reading CGI reply (no response received) 而我无法在nginx日志中findperl错误。 命令行上的“perl -c”有助于解决perl编译错误,但它不能帮助我解决运行时错误。 我怎么能告诉perl或fcgiwrap在nginx错误日志或其他一些日志文件中保存错误?

pythonexception中包含的errnos是否与“linux / errno.h”中的errnos相同?

据我所知,pythonexception返回的大部分errnos与“linux / errno.h”中的errnos相同。 但有时候,事情并不像我所期望的那样: 例如,当一个套接字连接抛出一个socket.timeoutexception时,返回的errno应该是110,然而,它的errno总是为None : try: address = ('8.8.8.8', 12345) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.settimeout(1) s.connect(address) except EnvironmentError as e: print e.errno # None print e.strerror # "time out" 其次,当一个地址相关的exception被抛出时,errno将是负数,但是linux / errno.h中的errnos在1到133之间: try: address = ('xxxxxxx', 12345) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(address) except socket.gaierror, v: print v[0] # -5 在这种情况下,将打印-5。 我对所有这些errnos感到困惑。 🙁

发生致命错误时如何重启Linux系统(C编程)

我正在为embedded式Linux(debian-arm)设备编写一个C程序。 在某些情况下,例如,如果系统/程序发生致命错误,我希望程序通过system("reboot"); 在通过syslog()logging错误之后。 我的程序包括multithreads , UDP sockets ,几个fwrite()/fopen() , malloc()调用,.. 我想问几个问题,除了syslog之外,重新启动系统之前程序应该执行什么操作(如何)。 我希望知道这些事情是如何由有经验的程序员完成的。 是否有必要在重新启动之前closures打开的套接字(UDP)和线程? 如果是这样,是否有一个函数/系统调用closures所有打开的套接字和线程? 如果线程需要closures,并没有这样的全局函数/调用来结束它们,我想如何执行pthread_exit(NULL); 为每个特定的线程? 我需要去使用像goto结束每个线程? 程序如何closuresfopen和fwrite使用的文件? 是否有一个全局调用来closures正在使用的文件,或者我需要找出正在使用的文件,然后使用fclose作为每个文件? 我看到在论坛上看到一些例子fflush() , flush() , sync() ,..,你会推荐使用哪一个? 在一般情况下,如果使用了所有这些function,它是否会引起任何问题(尽pipe这些function可能是不必要的)? 这是没有必要free malloc分配空间的variables,是吗? 你是否build议要执行其他任务?

如何陷阱全球bash on_error?

看来在Bash中的on_error陷阱只在它定义的函数范围内工作。例如运行这个脚本 #!/bin/bash on_error() { echo 'on_error' } f() { false echo 'function f' } g() { trap on_error ERR echo 'function g' false f } g 生产: function g on_error function f 有没有一种方法来捕获全局的on_error ,以便我不必将其分别陷入每个函数中?

ERR后面的实际信号是什么

我已经在几个地方(包括SO)读过-e被认为是“可怜的forms”,并且对于任何错误退出脚本是不可靠的。 处理错误的更好方法似乎是使用trap ,因此: trap "echo there was an error; exit 1;" ERR 我似乎无法find什么信号ERR实际上手册页? 我假设它是SIGQUIT但我无法确定。 man 7 signal 只有正常的信号,你会希望SIGTERM SIGQUIT SIGINT ,等等 man trap 有引用ERR信号,但似乎并没有定义它。 例如:“ A trap on ERR, if set, is executed before the shell exits. ” man bash 是类似的man trap ,是引用了ERR但没有从我所看到的定义它。 快捷方式ERR后面的实际信号是什么? (在man 7 signal看到的正常man 7 signal )。 我宁愿捕捉实际的信号名称,而不是速记版本,尽pipe我意识到它们会产生相同的结果(从脚本中的命令捕获任何错误,然后抛出处理程序)。

errno在Linux socket编程后接受

正如在RETURN VALUE部分的accept()手册页所述: error handling Linux accept() (和accept4() )将accept()的错误代码传递到新套接字上的已经挂起的networking错误。 这种行为不同于其他BSD套接字实现。 为了可靠的操作,应用程序应该在accept()之后检测为协议定义的networking错误,并通过重试将它们看作EAGAIN 。 在TCP / IP的情况下,这些是ENETDOWN , ENOPROTOOPT , EHOSTDOWN , ENONET , EHOSTUNREACH , EHOSTUNREACH , EOPNOTSUPP和ENETUNREACH 。 这是否意味着必须在accept()返回之后并在检查accept()的返回值之前检查errno的值? 如果是的话,并且如果errno则必须采取哪些措施? 这里是我的代码处理accept()的一个片段: newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen); if((errno == ENETDOWN || errno == EPROTO || errno == ENOPROTOOPT || errno == EHOSTDOWN || errno […]