命令 | 标准输出 | 错误输出 |
---|---|---|
>/dev/null 2>&1 | 丢弃 | 丢弃 |
2>&1 >/dev/null | 丢弃 | 屏幕 |
Linux添加环境变量
Jupyter 无法连接到 Python
问题描述
1 | kernel connecting |
及无法连接到后端的 Python, Shell 也无法打开
架构
笔者采用 jupyter docker + nginx 反向代理这个模式
打开日志发现
1 | [W 2022-02-22 15:14:10.078 ServerApp] 400 GET /terminals/websocket/1 (172.18.0.1) 0.67ms referer=None |
解决方法
更改 nginx 反向代理配置, 可能是没有识别websocket请求所致, 具体原因尚不清楚, 但以下这个配置在笔者这里可用
1 | location ~* \.(gif|png|jpg|css|js|woff|woff2)$ |
Shell 字符串拼接(链接, 合并)
例子
1 | #!/bin/bash |
结果
1 | Shellhttp://c.biancheng.net/shell/ |
参考链接
Shell 字符串操作
截取
从指定位置开始截取
从字符串左边开始截取
格式
1 | ${string:start:end} |
例
1 | url="c.biancheng.net" |
end 省略则截取到末尾
1 | url="c.biancheng.net" |
从右边开始截取
格式
1 | ${string: 0-start :length} |
例
1 | url="c.biancheng.net" |
end 省略
1 | url="c.biancheng.net" |
从指定字符(串)开始截取
使用 # 号截取右边字符
1 | ${string#*chars} |
例
1 | url="http://c.biancheng.net/index.html" |
注意,以上写法遇到第一个匹配的字符(子字符串)就结束了。例如
1 | url="http://c.biancheng.net/index.html" |
如果希望直到最后一个指定字符(子字符串)再匹配结束,那么可以使用##,具体格式为
1 | ${string##*chars} |
例
1 | #!/bin/bash |
使用 % 截取左边字符
使用%号可以截取指定字符(或者子字符串)左边的所有字符,具体格式如下:
1 | ${string%chars*} |
请注意的位置,因为要截取 chars 左边的字符,而忽略 chars 右边的字符,所以应该位于 chars 的右侧。其他方面%和#的用法相同,这里不再赘述,仅举例说明:
1 | #!/bin/bash |
总结
格式 | 说明 |
---|---|
${string: start :length} | 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。 |
${string: start} | 从 string 字符串的左边第 start 个字符开始截取,直到最后。 |
${string: 0-start :length} | 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符 |
${string: 0-start} | 从 string 字符串的右边第 start 个字符开始截取,直到最后 |
${string#*chars} | 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符 |
${string##*chars} | 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符 |
${string%*chars} | 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符 |
${string%%*chars} | 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符 |
参考链接
hexo部署项目报错解决:The mode argument must be integer(无需node降版本)
1 | FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html |
解决办法是修改package.json
文件,升级hexo-renderer-stylus
到2.0.0
版本
参考链接
https://evestorm.github.io/posts/430/
https://www.4spaces.org/hexo-mode-argument-must-be-integer-error/
文件系统特定的 LookupAndOpen[file] 实施失败
错误描述
1 |
|
解决方案, 找到对应的磁盘文件(可以在网页里查看到磁盘的挂载路径)
例如
1 | [datastore1] openwrt/openwrt-x86-64-generic-squashfs-combined.vmdk |
尝试修复
1 | vmkfstools -x repair /vmfs/volumes/<datastorepath>/<vm name>/<vm name main base disk>.vmdk |
例如
1 | # 切换到该目录下 |
结果
1 | Disk was successfully repaired. |
磁盘修复成功, 可以打开了.
参考链接
Jupyter配合Nginx反向代理的问题
SSL Error
当 jupyter 配置了 SSL 时, Nginx 反向代理时也需要用 https 协议
例如, 反向代理到本地的 10000 端口
错误示范
1 | proxy_pass http://127.0.0.1:10000; |
正确示范
1 | proxy_pass https://127.0.0.1:10000; |
Websocket 连接问题
在基于 Docker 部署 jupyter 工作环境时, 可能会发生可以打开网页, 可以创建文件, 但是无法与后端 python 连接的情况.
查看 jupyter 日志显示
1 | jupyter | [W 2021-09-21 16:09:24.778 ServerApp] 400 GET /terminals/websocket/1 (172.27.0.1) 1.21ms referer=None |
当我尝试用 jupyter 提供的 terminal 时, 发现以上日志.
这说明这个请求没有成功, 400 状态码参考 MDN
1 | HTTP 400 Bad Request 响应状态码表示由于语法无效,服务器无法理解该请求。 客户端不应该在未经修改的情况下重复此请求。 |
所以应该是 nginx 在与 jupyter 通信时发生了问题.
Google …
找到以下解决方案, 一个可用的 Nginx 反向代理配置
1 |
|
注意添加这三项
1 | proxy_http_version 1.1; |
参考链接
https://jupyter-notebook.readthedocs.io/en/latest/config.html#options
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Status/400
crontab 排错
问题描述
在用 crontab 定时备份 gitlab 时, 发现任务总是不成功. 😱😱😱
命令如下
1 | 0 0 * * * /root/docker/gitlab/backup-gitlab.sh >> /root/docker/gitlab/backup-gitlab.log 2>&1 |
测试后发现日志总是没有任何输出, 说明这个命令没有被执行. 🤔🤔🤔
随便写了条命令测试
1 | * * * * * echo "`date`" > /root/crontest.log |
发现有输出…. 😲😲😲
那么说明 crontab 确实工作了…. 😵😵😵
沉思…. 🤔🤔🤔
解决方案
虽然我不太清楚是什么原因, 但是当我把以下配置加入 crontab 后他开始工作了. 😄😄😄
1 | SHELL=/bin/bash |
也许是因为显式指定了 shell, 以及一些其他的一些参数, 导致可以正常工作, 因为我之前一直怀疑是权限的问题. 🤣🤣🤣
参考连接