使用VirtualBox安装Ubuntu界面显示不全的解决办法

今天初次用VirtualBox安装Ubuntu的时候,结果出现“Ubuntu界面显示不全”的问题,不管如何调整都不能完整显示出来,造成了使用VirtualBox安装Ubuntu时出现了界面中不显示完整窗口导致按钮隐藏无法点击的问题。如下图:

原因:

主要的原因是分辨率预设错误导致窗口显示不完整,而由于系统未完成安装,无法使用VirtualBox调整窗口分辨率。更加不用说使用VirtualBox“安装增强功能”了。

解决方法:

1、按住键盘上的Alt键+鼠标左键拖动弹出窗口直至显示需要点击的按钮。

2、如果用Alt键不生效,请用“win”键+鼠标左键拖拽。win键就是我们常用的:win+r 快捷键的那个图标。

3、同时按下ctrl+alt+t 呼出shell,然后xrandr 可以设置分辨率。

最终效果如下图:

发表在 应用工具软件, 操作系统相关 | 标签为 , | 留下评论

用supervisor守护php-fpm主进程来实现php-fpm的自动重启

最近有个针对php-fpm进程的监护需求,也即:如果php-fpm的master进程意外退出(可能是crash,也可能是被误kill),那么希望master进程能被自动拉起,以免中断服务。

我们知道,supervisor是一个非常强大的进程监控(monitor & control)工具,它理论上可以实现php-fpm master进程的守护需求。因此,我试验了如何用supervisor完成这个需求,结果表明,supervisor确实是神器,只需一个合理的配置文件,它就能解决问题。

下面是我的调研过程及最终实现php-fpm主进程守护功能的配置文件,在此做个记录,也希望能帮助到别人。

1. 安装supervisor

supervisor本身是python实现的,而且是调研阶段,故先创建一个新的virtualenv环境,然后用pip安装好supervisor包。

至此,基本的调研环境搭建完毕。当然,php-fpm和PHP环境以及前端的Nginx是早就ready的。

2. 分析php-fpm.sh脚本

通常编译安装PHP后,php-fpm这个2进制的C程序也会被编译并安装好,典型路径在php_install_path/sbin/目录下。该目录下还有个名为php-fpm.sh的脚本用于控制php-fpm进程的start/stop/restart/reload等动作。

./sbin/php-fpm.sh脚本中,”start”操作启动了php-fpm主进程,其余的操作都是通过向php-fpm master进程发signal实现的。

从上面是终端输入”./sbin/php-fpm.sh start”时,实际执行的代码,可以看到,php-fpm进程的启动参数是–daemonize $php_opts,而$php_opts的值为”–fpm-config $php_fpm_CONF –pid $php_fpm_PID”。

注意: php-fpm.sh启动php-fpm master进程时,传入了daemonize参数,表明php-fpm master process以守护(daemon)方式启动,而根据supervisor文档的说明,当用supervisor监护进程时,被监护进程不能是守护进程,这是由于守护进程通常会在fork完子进程后就让父进程”结束生命”,也即由supervisor创建的父进程退出,此时,supervisor无法再监护已退出进程创建出来的子进程。关于daemon process的行为,可以参考Linux Daemon Writing HOWTO一文来理解。

根据上面的分析,我们知道,只要supervisor启动php-fpm进程时,后者不以daemon方式启动即可。这需要两个动作来完成(假设已cd至PHP安装目录):
1)编辑./etc/php-fpm.conf,设置daemonize = no,默认是yes
2)在supervisor的配置文件中,设置’command’对php-fpm主进程的调起参数时,不传入–daemonize参数。

3. 实现php-fpm主进程守护功能的supervisor配置文件

上面的分析已经告诉我们应该怎么解决问题了,下面直接上验证可用的配置文件。文件位于php-fpm.conf同级目录下(典型路径为php_install_path/etc/)。

配置文件结构通过查看supervisor文档很容易就能掌握,有两个配置项需要特别注意

1) command

它指定了supervisor要监控的进程的启动命令,可以看到,这里我们没有给php-fpm传入daemonize参数,其余参数只是展开了php-fpm.sh中的shell变量而已。

大家已经注意到,command也不是直接调起php-fpm,而是通过bash -c执行了两个命令,而第一个命令是sleep 1。这是由于php-fpm在stop后,其占用的端口通常不能立即释放,此时,supervisor以极快的速度试图重新拉起进程时,可能会由于报如下错误而导致几次retry均失败:

而supervisor目前还不支持delay restart功能,因此,这里只能通过先sleep再启动的略显tricky的方法来解决问题,结果表明,疗效不错且无副作用。

2) autorestart

其文档描述如下:

其默认值是unexpected,表示若被监护进程的exit code异常时,supervisor才会重新拉起进程。这里设置为true,表明任何时候进程退出均会被再次拉起。

这样配置好后,在本文第1步搭建好的virtualenv环境中,运行如下命令即可完成supervisor对php-fpm master进程的监护:

然后,通过ps x | fgrep fpm可以看到,php-fpm主进程已经被拉起了。
然后,kill掉php-fpm主进程,再次ps x | fgrep fpm可以看到,一个新的php-fpm主进程会被supervisor创建出来。

至此,用supervisor守护php-fpm主进程以实现php-fpm的自动重启的需求已经解决了。

参考资料

  1. Supervisor: A Process Control System
  2. Linux Daemon Writing HOWTO
发表在 CS架构后台语言, 应用工具软件 | 标签为 , | 留下评论

mac brew 国内源配置

alias vcpkg=”/Users/icezhang/Desktop/vcpkg-master/vcpkg”

alias python=”/usr/local/bin/python3″

alias idf=’. $HOME/esp/esp-idf/export.sh’

一、自动脚本(全部国内地址)(在终端中复制粘贴回车下面脚本)

苹果电脑 常规安装脚本(推荐 完全体 几分钟安装完成):

苹果电脑 极速安装脚本(精简版 几秒钟安装完成):

苹果电脑 卸载脚本:

Linux电脑 安装脚本:

Linux电脑 卸载脚本:

成功的话,如上图所示。

二、常见错误说明

Mac 10.11系统版本以下的(包括10.11),brew官方已经停止对这类老系统的支持。

1、first run: git -C xxxxxxx 等类似语句。

有可能废纸篓有之前自己删除的brew文件夹,清空一下。

如果还有这种提示,把报错中提供的解决语句(git -C ….)逐句运行一般就可以解决。

2、如果遇到报错中含有errno 54 / 443 / 的问题:

这种一般切换源以后没有问题,因为都是公益服务器,不稳定性很大。

3、检测到你不是最新系统,需要自动升级Ruby后失败的:

如果还失败运行下面文章的脚本。

金牛肖马:如何升级Mac os自带的Ruby和Gem​zhuanlan.zhihu.com​

4、如果报错 command not found : brew

先运行下面命令看是否能出来Homebrew的版本号(结果看倒数3句)

再运行设置临时PATH的代码:

如果能用就是电脑PATH配置问题,重启终端运行echo $PATH打印出来自己分析一下。

5、如果brew -v没有报错 , brew update出错的:

这种不影响使用,尝试再次运行brew update可能赶上服务器不稳定的一瞬间。

6、brew有一个自检程序,如果有问题自检试试:

提示http://github.com的地址问题不用在意,因为换成国内地址了,所以警告::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::1

7、Error: Running Homebrew as root is extremely dangerous and no longer supported.
As Homebrew does not drop privileges on installation you would be giving all
build scripts full access to your system.

原因是执行过su命令,把账户切换到了root权限,退出root权限即可。
一般关闭终端重新打开即可,或者输入命令exit回车 或者su – 用户名

8、/usr/local/bin/brew: bad interpreter: /bin/bash^M: no such file or directory

如果显示true那就运行下面这句话可以解决:

运行完成后,需要重新运行安装脚本。

9、from /usr/local/Homebrew/Library/Homebrew/brew.rb:23:in `<main>’

10、M1芯片电脑运行which brew如果显示/usr/local/Homebrew/bin/brew

解决方法,运行卸载程序把之前的卸载掉或者手动删除/usr/local目录:

 

发表在 操作系统相关 | 标签为 , | 留下评论

记录libreoffice实现office转pdf(适用于windows、linux)

由于目前的工作跟office打交道比较多,所以才有了此篇blog,需求是实现word转换pdf方便页面展示。之前lz采用的是jacob(仅支持windows)进行转换的,但是现在服务器改成linux显然不能用了,于是网上搜罗一圈,最终决定采用LibreOffice。(前提:需要安装jdk环境)

LibreOffice中文官网:https://zh-cn.libreoffice.org/   下载合适的版本,本文下载的是6.1.6

一:windows下实现office转pdf

安装:直接一键默认安装

环境变量:在path前加入libreoffice安装路径(如:D:\Program Files\LibreOffice\program)

进入dos窗口输入soffice 如果弹出libreoffice界面则表示安装成功

java程序实现转换操作(原理通过cmd调用libreoffice指令)

/**
     * 利用libreOffice将office文档转换成pdf
     * @param inputFile  目标文件地址
     * @param pdfFile    输出文件夹
     * @return
     */
    public static boolean convertOffice2PDF(String inputFile, String pdfFile){
        long start = System.currentTimeMillis();
        String command;
        boolean flag;
        String osName = System.getProperty("os.name");
        if (osName.contains("Windows")) {
            command = "cmd /c start soffice --headless --invisible --convert-to pdf:writer_pdf_Export " + inputFile + " --outdir " + pdfFile;
        }else {
            command = "libreoffice --headless --invisible --convert-to pdf:writer_pdf_Export " + inputFile + " --outdir " + pdfFile;
        }
        flag = executeLibreOfficeCommand(command);
        long end = System.currentTimeMillis();
        logger.debug("用时:{} ms", end - start);
        return flag;
    }
    /**
     * 执行command指令
     * @param command
     * @return
     */
    public static boolean executeLibreOfficeCommand(String command) {
        logger.info("开始进行转化.......");
        Process process;// Process可以控制该子进程的执行或获取该子进程的信息
        try {
            logger.debug("convertOffice2PDF cmd : {}", command);
            process = Runtime.getRuntime().exec(command);// exec()方法指示Java虚拟机创建一个子进程执行指定的可执行程序,并返回与该子进程对应的Process对象实例。
            // 下面两个可以获取输入输出流
//            InputStream errorStream = process.getErrorStream();
//            InputStream inputStream = process.getInputStream();
        } catch (IOException e) {
            logger.error(" convertOffice2PDF {} error", command, e);
            return false;
        }
        int exitStatus = 0;
        try {
            exitStatus = process.waitFor();// 等待子进程完成再往下执行,返回值是子线程执行完毕的返回值,返回0表示正常结束
            // 第二种接受返回值的方法
            int i = process.exitValue(); // 接收执行完毕的返回值
            logger.debug("i----" + i);
        } catch (InterruptedException e) {
            logger.error("InterruptedException  convertOffice2PDF {}", command, e);
            return false;
        }
        if (exitStatus != 0) {
            logger.error("convertOffice2PDF cmd exitStatus {}", exitStatus);
        } else {
            logger.debug("convertOffice2PDF cmd exitStatus {}", exitStatus);
        }
        process.destroy(); // 销毁子进程
        logger.info("转化结束.......");
        return true;
    }  

二:Linux下实现office转pdf

安装:把下载下来的三个安装包上传到linux,采用  tar -xvf xxxxxx.tar.gz解压即可

然后进入RPMS包下,采用yum localinstall *.rpm安装rpm文件

测试是否安装成功:libreoffice6.1 -help

为了使用libreoffice创建别名

[root@VM]# alias libreoffice='libreoffice6.0'
[root@VM]# alias
alias cp='cp -i'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l.='ls -d .* --color=auto'
alias libreoffice='libreoffice6.0'
alias ll='ls -l --color=auto'
alias ls='ls --color=auto'

linux下面命令行测试word转pdf(其参数与windows下的参数大体相同)

命令:libreoffice –convert-to pdf:writer_pdf_Export /usr/lib/files/白头拟稿纸.doc –outdir /usr/lib/files/

关于word转pdf中文乱码问题处理

1:查看fonts目录:cat /etc/fonts/fonts.conf | grep fon
得知字体存放位置:/usr/share/fonts

2: 把Windows下的字体C:\Windows\Fonts下的宋体,即simsun.ttc上传到linux服务器
在fonts下新建Fonts文件 把字体上传到该路径下即可

作者: 不二尘
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
发表在 应用工具软件 | 标签为 | 留下评论

CentOS安装LibreOffice

安装LibreOffice

卸载原有

下载libreoffice

安装依赖

查看 help

查看版本

转化命令

执行命令后长时间无反应

中文转化不理想或者乱码

下载字体链接

Fonts 下载

报错 subprocess.SubprocessError: failed: 0x4c0c

发表在 应用工具软件 | 标签为 | 留下评论

CentOS7 安装ffmpeg

1、安装EPEL Release

因为安装需要使用其他的repo源,所以需要EPEL支持:
yum install -y epel-release
#如果出现缺少Code提示,可以:

sudo rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
#安装完成之后,可以查看是否安装成功
yum repolist
安装Nux-Dextop源

#导入一个Code
sudo rpm –import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
#安装nux-dextop 源
sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
#查看repo源是否安装成功
yum repolist
yum安装ffmpeg:

yum install -y ffmpeg

2、安装完成后检查ffmpeg 版本:

ffmpeg -version

3、如果你想了解更多关于FFmpeg使用方面的资料,可以输入:

ffmpeg -h

4、例子:

使用FFmpeg将mp3转为ogg

ffmpeg -i MLKDream_64kb.mp3 -c:a libvorbis -q:a 4 MLKDream_64kb.ogg

使用FFmpeg将flv转为mp4

ffmpeg -i beeen.flv -y -vcodec copy -acodec copy beeen.mp4

发表在 应用工具软件 | 标签为 | 留下评论

ts格式视频缓存批量下载合并方法

批量下载

  • 其中中括号[00001-01200]表示连续的数字,因为资源具有序号特点。

批量合并

  • 路径下所有的.ts文件合并成new.ts

以上代码用txt记事本新建,并修改后缀名为.bat,运行即可实现批量下载和合并

发表在 操作系统相关, 生活随笔 | 标签为 , , | 留下评论

Windows下安装Cisco VPN Client终极解决方法

本文是针对win10下安装Cisco VPN Client出现的问题,编写的全程教程,同时也适用于windows的其它版本,可作为参考,本文以64位安装为例,安装文件如图所示。

这两个文件在WIN10中安装会出错,我直接把解压包放在本文的附件中:

我的系统是win10x64,对应安装文件为64位的,打开之后如图:

我们选择msi文件,打开安装。

但是多半会出现下面的错误:

这时候,网上流传的各种修改注册表的方法不顶用,因为Win10的注册表不同于他们提到的Win7、Win8的传统型,

现在就需要补丁了。

补丁文件也在附件中。

安装了对应版本的补丁,再打开下图中所示的msi文件(注意不是exe,是msi),就可以顺利安装完,进行使用了。

但是,还会有一个小问题,在配置好VPN进行连接的时候出现了“vpn 422 failed to enable virtual adapter”的错误.

这是因为这个安装文件是针对于WindowsXP等低版本的,所以注册表上还需要一点点修改:

进入注册表regedit

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\CVirtA找到DisplayName,

x86系统的将值”@oem16.inf,%CVirtA_Desc%;Cisco Systems VPN Adapter”

更改为”Cisco Systems VPN Adapter”

x64系统的将值 “@oem16.inf,%CVirtA_Desc%;Cisco Systems VPN Adapter for 64-bit Windows”

更改为”Cisco Systems VPN Adapter for 64-bit Windows”

再次尝试连接,问题解决了。

 

WIN10 VPN.zip

发表在 系统分类 | 标签为 , | 留下评论

Nginx Location指令配置及常用全局变量

Nginx Location 指令基础

 

Nginx目录访问

Nginx默认是不允许列出整个目录的。如需此功能,

打开nginx.conf文件,在location server 或 http段中加入
autoindex on;
另外两个参数最好也加上去:

autoindex_exact_size off;
默认为on,显示出文件的确切大小,单位是bytes。
改为off后,显示出文件的大概大小,单位是kB或者MB或者GB

autoindex_localtime on;
默认为off,显示的文件时间为GMT时间。
改为on后,显示的文件时间为文件的服务器时间

隐藏nginx版本信息

server_tokens off;

发表在 应用工具软件 | 标签为 , | 留下评论

Windows 下开启FTP服务并创建FTP用户

一、创建用于登入 FTP 的用户。

  1. 打开计算机管理程序,依次点击左侧本地用户组–>用户,右侧空白处右击点击“新用户”。
  2. 填写用于登入FTP服务器的新用户信息,如下图所示
  3. 点击创建完成新用户创建,在新弹出的窗口中点关闭,到此新用户创建完成

二、开启 FTP 服务

  • 控制面板中找到程序和功能,在左侧的菜单点击“打开或关闭Windows功能”,在弹窗的窗口中勾选FTP服务、FTP扩展性、IIS管理控制台,只需要勾选途中框起来的3个即可,确定后等待几分钟即可完成,部分设备可能需要重新启动计算机。

三、允许FTP服务通过防火墙(如果你的防火墙已经关闭,无视这一步)

  1. 控制面板中找到Windows 防火墙,点击左侧的“运行程序或功能通过Windows防火墙”。
  2. 在弹出的窗口中勾选FTP服务器并确定。

四、创建 FTP 服务

  1. win + R 运行 InetMgr 打开 Internet 信息服务(IIS)管理器,在左侧的 空白区域右击选择“添加FTP站点…”。
  2. 录入站点名称,和需要映射FTP服务的文件路径。
  3. IP地址默认全部未分配即可,端口号默认21,SSL这里选无。
  4. 因为我要求FTP服务只能通过新建的用户登入,所以身份验证选基本,授权这里指定刚刚创建的用户。

    做完以上这些,整个FTP服务就算搭建完成了。

五、验证及排错

  1. 打开文件浏览器,在地址栏输入 ftp:// 你的 ip 地址。
  2. 在弹出的窗口中输入创建的用户和密码,点击登录,成功后就可以看到你的 FTP 服务里的文件了。
  3. 如果出现无法登陆的问题,首先检查你的用户密码是否正确,也有可能是文件权限的问题,文件权限可以按照以下步骤进行处理。
    3.1.1 找到 FTP 文件路径,右击属性,添加 FTP 用户的权限



  4. 如果出现外部不能访问的问题,在不关闭防火墙的环境下可以用以下方式解决。
    4.1.1 控制面板–>Windows防火墙–>允许程序或功能通过Windows防火墙–>新窗口中允许运行另一程序”。在浏览中找到“C:\Windows\System32\svchost.exe”,打开并添加。。

    4.1.2 此时多了一个多出一项“Windows服务主进程”,勾选后面的两个复选框,完成后确认。
发表在 操作系统相关 | 标签为 | 留下评论