#1
The history tab of SABnzbd constantly alternates between the actual download history and the "could not connect to SABnzbd" message. SABnzbd is running behind a nginx reverse proxy with basic auth. Sonarr is running behind the same reverse proxy, without any problems. The logs say something about a duplicate auth header.

nginx error.log

Code: Select all

2018/04/22 12:24:01 [info] 23939#23939: *273 client sent duplicate header line: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx", previous value: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx" while reading client request headers, client: 123.123.123.123, server: domain.net, request: "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1"
2018/04/22 12:24:01 [info] 23939#23939: *274 client sent duplicate header line: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx", previous value: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx" while reading client request headers, client: 123.123.123.123, server: domain.net, request: "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1"
2018/04/22 12:24:07 [info] 23939#23939: *289 client sent duplicate header line: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx", previous value: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx" while reading client request headers, client: 123.123.123.123, server: domain.net, request: "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1"
2018/04/22 12:24:07 [info] 23939#23939: *288 client sent duplicate header line: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx", previous value: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx" while reading client request headers, client: 123.123.123.123, server: domain.net, request: "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1"
2018/04/22 12:24:16 [info] 23939#23939: *294 client sent duplicate header line: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx", previous value: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx" while reading client request headers, client: 123.123.123.123, server: domain.net, request: "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1"
2018/04/22 12:24:16 [info] 23939#23939: *295 client sent duplicate header line: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx", previous value: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx" while reading client request headers, client: 123.123.123.123, server: domain.net, request: "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1"
2018/04/22 12:24:19 [info] 23939#23939: *300 client sent duplicate header line: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx", previous value: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx" while reading client request headers, client: 123.123.123.123, server: domain.net, request: "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1"
2018/04/22 12:24:19 [info] 23939#23939: *301 client sent duplicate header line: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx", previous value: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx" while reading client request headers, client: 123.123.123.123, server: domain.net, request: "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1"
2018/04/22 12:24:31 [info] 23939#23939: *303 client sent duplicate header line: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx", previous value: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx" while reading client request headers, client: 123.123.123.123, server: domain.net, request: "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1"
2018/04/22 12:24:31 [info] 23939#23939: *302 client sent duplicate header line: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx", previous value: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx" while reading client request headers, client: 123.123.123.123, server: domain.net, request: "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1"
2018/04/22 12:24:37 [info] 23939#23939: *312 client sent duplicate header line: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx", previous value: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx" while reading client request headers, client: 123.123.123.123, server: domain.net, request: "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1"
2018/04/22 12:24:37 [info] 23939#23939: *316 client sent duplicate header line: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx", previous value: "Authorization: Basic xxxxxxxxxxxxxxxxxxxxxxxx" while reading client request headers, client: 123.123.123.123, server: domain.net, request: "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1"
nginx access.log

Code: Select all

123.123.123.123 - hanbo [22/Apr/2018:12:24:00 +0200] "GET /sabnzbd/api?mode=history&output=json&apikey=11111111111111111111111111111111&start=0&limit=20&output=json HTTP/1.1" 200 31263 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:00 +0200] "GET /sabnzbd/api?mode=warnings&output=json&apikey=11111111111111111111111111111111 HTTP/1.1" 200 16 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:01 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 400 166 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:01 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 400 166 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:02 +0200] "GET /sabnzbd/api?mode=resume&output=json&apikey=11111111111111111111111111111111 HTTP/1.1" 200 16 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:02 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 200 910 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:04 +0200] "GET /sabnzbd/api?mode=history&output=json&apikey=11111111111111111111111111111111&start=0&limit=20&output=json HTTP/1.1" 200 31263 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:04 +0200] "GET /sabnzbd/api?mode=history&output=json&apikey=11111111111111111111111111111111&start=0&limit=20&output=json HTTP/1.1" 200 31263 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:07 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 400 166 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:07 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 400 166 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:10 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 200 910 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:10 +0200] "GET /sabnzbd/api?mode=history&output=json&apikey=11111111111111111111111111111111&start=0&limit=20&output=json HTTP/1.1" 200 31263 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:13 +0200] "GET /sabnzbd/api?mode=history&output=json&apikey=11111111111111111111111111111111&start=0&limit=20&output=json HTTP/1.1" 200 31263 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:13 +0200] "GET /sabnzbd/api?mode=history&output=json&apikey=11111111111111111111111111111111&start=0&limit=20&output=json HTTP/1.1" 200 31263 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:16 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 400 166 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:16 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 400 166 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:19 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 400 166 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:19 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 400 166 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:22 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 200 910 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:22 +0200] "GET /sabnzbd/api?mode=history&output=json&apikey=11111111111111111111111111111111&start=0&limit=20&output=json HTTP/1.1" 200 31263 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:25 +0200] "GET /sabnzbd/api?mode=history&output=json&apikey=11111111111111111111111111111111&start=0&limit=20&output=json HTTP/1.1" 200 31263 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:25 +0200] "GET /sabnzbd/api?mode=history&output=json&apikey=11111111111111111111111111111111&start=0&limit=20&output=json HTTP/1.1" 200 31263 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:28 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 200 910 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:28 +0200] "GET /sabnzbd/api?mode=history&output=json&apikey=11111111111111111111111111111111&start=0&limit=20&output=json HTTP/1.1" 200 31263 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:30 +0200] "GET /sabnzbd/api?mode=fullstatus&output=json&apikey=11111111111111111111111111111111&skip_dashboard=1 HTTP/1.1" 200 2683 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:30 +0200] "GET /sabnzbd/api?mode=history&output=json&apikey=11111111111111111111111111111111&start=0&limit=20&output=json HTTP/1.1" 200 31263 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:31 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 400 166 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:31 +0200] "GET /sabnzbd/api?mode=warnings&output=json&apikey=11111111111111111111111111111111 HTTP/1.1" 200 16 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:34 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 200 910 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:34 +0200] "GET /sabnzbd/api?mode=history&output=json&apikey=11111111111111111111111111111111&start=0&limit=20&output=json HTTP/1.1" 200 31263 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:34 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 400 166 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:37 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 400 166 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:37 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 400 166 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:40 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 200 910 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:40 +0200] "GET /sabnzbd/api?mode=history&output=json&apikey=11111111111111111111111111111111&start=0&limit=20&output=json HTTP/1.1" 200 31263 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:43 +0200] "GET /sabnzbd/api?mode=queue&output=json&apikey=11111111111111111111111111111111&start=0&output=json HTTP/1.1" 200 910 "-" "-"
123.123.123.123 - hanbo [22/Apr/2018:12:24:43 +0200] "GET /sabnzbd/api?mode=history&output=json&apikey=11111111111111111111111111111111&start=0&limit=20&output=json HTTP/1.1" 200 31263 "-" "-"
#4
Still having the issue after the update. And the values in the logs are not real, I changed them for privacy reasons.
The problem seems to be, that nzb360 sometimes adds a second "Authorization" header to the request, which nginx does not accept and therefore answers with a 400 bad request. I could not see any pattern of requests that leads to the duplicate auth header. The connection address looks like this: "https://user:pass@123.123.123.123".

Here is a HTTP stream with requests that have the duplicate header.

Code: Select all

GET /api?mode=version&output=json&apikey=e584bcea53b7cede92d244aea14314a7&output=json HTTP/1.1
Accept-Encoding: identity
Authorization: Basic ZXNlbDptZXNlbA==
Host: 123.123.123.123
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 23 Apr 2018 21:12:53 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 20
Connection: keep-alive
Vary: Accept-Encoding
Pragma: no-cache

{"version": "2.3.3"}



GET /api?mode=fullstatus&output=json&apikey=e584bcea53b7cede92d244aea14314a7&skip_dashboard=1 HTTP/1.1
Accept-Encoding: identity
Authorization: Basic ZXNlbDptZXNlbA==
Host: 123.123.123.123
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 23 Apr 2018 21:12:53 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 2684
Connection: keep-alive
Vary: Accept-Encoding
Pragma: no-cache

{"status": ...}



GET /api?mode=queue&output=json&apikey=e584bcea53b7cede92d244aea14314a7&start=0&output=json HTTP/1.1
Accept-Encoding: identity
Authorization: Basic ZXNlbDptZXNlbA==
Host: 123.123.123.123
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 23 Apr 2018 21:12:55 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 940
Connection: keep-alive
Vary: Accept-Encoding
Pragma: no-cache

{"queue": ...}



GET /api?mode=version&output=json&apikey=e584bcea53b7cede92d244aea14314a7&output=json HTTP/1.1
Accept-Encoding: identity
Authorization: Basic ZXNlbDptZXNlbA==
Host: 123.123.123.123
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 23 Apr 2018 21:12:56 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 20
Connection: keep-alive
Vary: Accept-Encoding
Pragma: no-cache

{"version": "2.3.3"}



GET /api?mode=fullstatus&output=json&apikey=e584bcea53b7cede92d244aea14314a7&skip_dashboard=1 HTTP/1.1
Accept-Encoding: identity
Authorization: Basic ZXNlbDptZXNlbA==
Host: 123.123.123.123
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 23 Apr 2018 21:12:56 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 2684
Connection: keep-alive
Vary: Accept-Encoding
Pragma: no-cache

{"status": ...}



GET /api?mode=queue&output=json&apikey=e584bcea53b7cede92d244aea14314a7&start=0&output=json HTTP/1.1
Accept-Encoding: identity
Authorization: Basic ZXNlbDptZXNlbA==
Host: 123.123.123.123
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 23 Apr 2018 21:12:56 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 940
Connection: keep-alive
Vary: Accept-Encoding
Pragma: no-cache

{"queue": ...}



GET /api?mode=history&output=json&apikey=e584bcea53b7cede92d244aea14314a7&start=0&limit=20&output=json HTTP/1.1
Accept-Encoding: identity
Authorization: Basic ZXNlbDptZXNlbA==
Host: 123.123.123.123
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 23 Apr 2018 21:12:56 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 32454
Connection: keep-alive
Vary: Accept-Encoding
Pragma: no-cache

{"history": ...}



GET /api?mode=history&output=json&apikey=e584bcea53b7cede92d244aea14314a7&start=0&limit=20&output=json HTTP/1.1
Accept-Encoding: identity
Authorization: Basic ZXNlbDptZXNlbA==
Authorization: Basic ZXNlbDptZXNlbA==
Host: 123.123.123.123
Connection: Keep-Alive

HTTP/1.1 400 Bad Request
Server: nginx
Date: Mon, 23 Apr 2018 21:12:59 GMT
Content-Type: text/html
Content-Length: 166
Connection: close

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>



GET /api?mode=version&output=json&apikey=e584bcea53b7cede92d244aea14314a7&output=json HTTP/1.1
Accept-Encoding: identity
Authorization: Basic ZXNlbDptZXNlbA==
Host: 123.123.123.123
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 23 Apr 2018 21:12:53 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 20
Connection: keep-alive
Vary: Accept-Encoding
Pragma: no-cache

{"version": "2.3.3"}



GET /api?mode=fullstatus&output=json&apikey=e584bcea53b7cede92d244aea14314a7&skip_dashboard=1 HTTP/1.1
Accept-Encoding: identity
Authorization: Basic ZXNlbDptZXNlbA==
Host: 123.123.123.123
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 23 Apr 2018 21:12:53 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 2684
Connection: keep-alive
Vary: Accept-Encoding
Pragma: no-cache

{"status": ...}



GET /api?mode=queue&output=json&apikey=e584bcea53b7cede92d244aea14314a7&start=0&output=json HTTP/1.1
Accept-Encoding: identity
Authorization: Basic ZXNlbDptZXNlbA==
Host: 123.123.123.123
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 23 Apr 2018 21:12:55 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 940
Connection: keep-alive
Vary: Accept-Encoding
Pragma: no-cache

{"queue": ...}



GET /api?mode=version&output=json&apikey=e584bcea53b7cede92d244aea14314a7&output=json HTTP/1.1
Accept-Encoding: identity
Authorization: Basic ZXNlbDptZXNlbA==
Host: 123.123.123.123
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 23 Apr 2018 21:12:56 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 20
Connection: keep-alive
Vary: Accept-Encoding
Pragma: no-cache

{"version": "2.3.3"}



GET /api?mode=fullstatus&output=json&apikey=e584bcea53b7cede92d244aea14314a7&skip_dashboard=1 HTTP/1.1
Accept-Encoding: identity
Authorization: Basic ZXNlbDptZXNlbA==
Host: 123.123.123.123
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 23 Apr 2018 21:12:56 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 2684
Connection: keep-alive
Vary: Accept-Encoding
Pragma: no-cache

{"status": ...}



GET /api?mode=queue&output=json&apikey=e584bcea53b7cede92d244aea14314a7&start=0&output=json HTTP/1.1
Accept-Encoding: identity
Authorization: Basic ZXNlbDptZXNlbA==
Host: 123.123.123.123
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 23 Apr 2018 21:12:56 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 940
Connection: keep-alive
Vary: Accept-Encoding
Pragma: no-cache

{"queue": ...}



GET /api?mode=history&output=json&apikey=e584bcea53b7cede92d244aea14314a7&start=0&limit=20&output=json HTTP/1.1
Accept-Encoding: identity
Authorization: Basic ZXNlbDptZXNlbA==
Host: 123.123.123.123
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: nginx
Date: Mon, 23 Apr 2018 21:12:56 GMT
Content-Type: application/json;charset=UTF-8
Content-Length: 32454
Connection: keep-alive
Vary: Accept-Encoding
Pragma: no-cache

{"history": ...}



GET /api?mode=history&output=json&apikey=e584bcea53b7cede92d244aea14314a7&start=0&limit=20&output=json HTTP/1.1
Accept-Encoding: identity
Authorization: Basic ZXNlbDptZXNlbA==
Authorization: Basic ZXNlbDptZXNlbA==
Host: 123.123.123.123
Connection: Keep-Alive

HTTP/1.1 400 Bad Request
Server: nginx
Date: Mon, 23 Apr 2018 21:12:59 GMT
Content-Type: text/html
Content-Length: 166
Connection: close

<html>
<head><title>400 Bad Request</title></head>
<body bgcolor="white">
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>
cron