有没有办法让 PhantomJS(或任何无头浏览器)使用替代字体缓存/usr/share/fonts/?在 PhantomJS 中使用更多字体(例如 CJK 字体)的一种方法是将它们安装到此目录中。但是,这是一个共享服务器,无法完成。
我似乎无法为此找到CLI 参数。如果这是一个愚蠢的问题,请原谅我。
这是一个 RedHat 版本,yum 和 rpm 被禁用。
PhantomJS 的屏幕截图- 字体未加载:
预期结果(http://v1.jontangerine.com/silo/typography/web-fonts/):
已解决: @grochmal 向我展示了字体可以安装在主文件夹中。我跑fc-cache -vf了,系统字体和~/.fonts/TTF字体都被缓存了。例如,运行fc-list "impact"找到 Impact 字体(仅供个人使用):
> fc-list impact
Impact:style=Regular,Normal,oby?ejné,Standard,????????,Normaali,Normál,Normale,Standaard,Normalny,???????,Normálne,Navadno,Arrunta
Run Code Online (Sandbox Code Playgroud)
我用@grochmal 巧妙建议的堆栈跟踪证实了这一点:
strace ./phantomjs ../examples/rasterize.js http://example.com img.jpg 2>&1 | grep font
Run Code Online (Sandbox Code Playgroud)
并发现 PhantomJS 确实在我的用户字体目录中查找
open("/home/user1/.fonts/TTF/verdana.ttf", O_RDONLY) = 11
open("/home/user1/.fonts/TTF/AndaleMo.TTF", O_RDONLY) = 11
open("/home/user1/.fonts/TTF/arial.ttf", O_RDONLY) = 11
open("/home/user1/.fonts/TTF/cour.ttf", O_RDONLY) = 11
open("/home/user1/.fonts/TTF/georgia.ttf", O_RDONLY) = …Run Code Online (Sandbox Code Playgroud) 1) 在Xvfb没有输入设备的情况下运行,或
2) 开始Xvfb运行
我有两台机器都具有几乎相同的 CentOS 构建。一台机器有 root 访问权限和互联网,另一台是沙盒(没有 root 访问权限),没有包管理器(没有 yum),也没有 Xserver。我试图让Xvfb(X 虚拟帧缓冲区)在目标机器上运行以试验无头 firefox。当Xvfb工作时,我可以使用xvfb-run。
我已Xvfb使用此方法成功传输了二进制文件和用户共享库(请参阅答案下方的注释)。我能够运行Xvfb,像这样
Xvfb :1 -nolisten tcp -screen 0 1680x1050x16
Run Code Online (Sandbox Code Playgroud)
但后来我收到一个键盘映射错误(旁白:我还想处理我设置的临时目录问题export TMPDIR=~/tmp):
_XSERVTransmkdir: Owner of /tmp/.X11-unix should be set to root
XKB: Failed to compile keymap
Keyboard initialization failed. This could be a missing or incorrect setup of …Run Code Online (Sandbox Code Playgroud) 我想问一下 SSH 连接通常需要多少内存。以下是我如何找出发生了多少 RAM 命中:
请不要因为我正在使用 GoDaddy 共享托管计划或 cPanel 而激动不已。当没有任何运行时,cPanel 报告正在使用 0 MB 的 RAM。当我通过 SSH 连接到我的(1GB,2 个 CPU)共享主机时,cPanel 突然报告大约 490 MB 的 RAM 正在使用中。
(另外,我实际上删除了公共文件夹中的所有 PHP 文件,以消除由于机器人爬行而导致的可能性。我阅读了https://serverfault.com/questions/449296/why-is-linux-reporting-free-memory-奇怪的是,但这没有帮助。)
无连接:
通过 SSH 连接到我的帐户后:
ps aux输出:
login as: user123
user123@xxxx.com's password:
user123@a2plcpnl0490 [~]$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
user123 675171 0.0 0.0 138652 1492 ? S 11:09 0:00 pure-ftpd (ID
user123 678698 0.0 0.0 191408 9132 ? S 11:25 0:00 …Run Code Online (Sandbox Code Playgroud) 过滤表是丢弃数据包的最佳位置,同意。
但是,开箱即用,Docker 通过 PREROUTING 绕过 INPUT 过滤器规则到它自己的 FORWARD 规则,使 Docker 容器世界可访问。插入DOCKER 命名的过滤器 INPUT/FORWARD 规则失败,因为当 Docker 重新启动时,它们被删除然后插入(未附加)。
我最好的尝试是在 Docker 之前插入另一个 PREROUTING 链,并将不需要的数据包从 eth0 (WAN) 发送到黑洞 - 0.0.0.1 - 因为您不能再在 nat 表中删除/拒绝。
# Route anything but TCP 80,443 and ICMP to an IPv4 black hole
iptables -t nat -N BLACKHOLE
iptables -t nat -A BLACKHOLE ! -i eth0 -j RETURN
iptables -t nat -A BLACKHOLE -m conntrack --ctstate ESTABLISHED,RELATED -j RETURN
iptables -t nat -A BLACKHOLE -p tcp --dport 80 …Run Code Online (Sandbox Code Playgroud) 说我这样做:
tar cvf allfiles.tar $(<mylist.txt)
和mylist.txt包含这个:
/tmp/lib1
/tmp/path2/lib2
/path3/lib3
Run Code Online (Sandbox Code Playgroud)
如何对文件进行 tar,以便 tarball 只包含
lib1
lib2
lib3
Run Code Online (Sandbox Code Playgroud)
根本没有目录结构?
该-C的--directory通常推荐的选项(REF,REF),但有多个目录,所以这是行不通的。此外,--xform看起来它需要一个我们没有的固定模式(ref)。
这是我的步骤:
mkdir /mnt/docs
chown www-data:www-data /mnt/docs
ls -l /mnt
Run Code Online (Sandbox Code Playgroud)
积极的结果:
drwxr-xr-x 2 www-data www-data 4096 Jan 6 01:14 docs
drwxr-xr-x 2 root root 4096 Dec 8 21:46 cdrom
Run Code Online (Sandbox Code Playgroud)
现在我成功挂载了远程共享(我可以touch以 root 身份将其归档),就像这样
mount -t cifs //192.168.1.10/Public/Documents/Docs -o username=****,password="****" /mnt/docs
ls -l /mnt
Run Code Online (Sandbox Code Playgroud)
否定结果(所有者回到root):
drwxr-xr-x 2 root root 0 Jan 12 02:51 docs
drwxr-xr-x 2 root root 4096 Dec 8 21:46 cdrom
Run Code Online (Sandbox Code Playgroud)
然后我尝试chown像这样(使用-h)符号链接
chown -h www-data:www-data /mnt/docs
ls -l /mnt
Run Code Online (Sandbox Code Playgroud)
但结果还是
drwxr-xr-x 2 root root 0 Jan 12 …Run Code Online (Sandbox Code Playgroud)