AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-254368

DroidOS's questions

Martin Hope
DroidOS
Asked: 2020-02-21 13:33:43 +0800 CST

在其他服务启动后在启动时运行 PHP 脚本

  • 2

要将定期天气更新到我的 Redis 数据库中,我尝试使用的方案如下

我有一个从相关天气 API 获取天气的 PHP 脚本。它是这样的

<?php
 function getWeather()
 {
  if (weatherupdaterequired)
  {
   //weather API call
   //parse and store to database
  }
 }

 while (true)
 {
  getWeather();
  sleep(30);
 }
?>

它存储在我的/usr/local/bin文件夹中。在同一个文件夹中,我有一个 shell 脚本,runweather它就是这样做的:

#!/bin/sh
nohup php /usr/local/bin/echoweather.php  >/dev/null 2>&1 &

我通常倾向于使用#!/bin/bash,但在这种情况下,我发现在启动时运行 - 正如您将在下面看到的那样 - 只能#!/bin/sh工作。我认为这与尚不可用的 bash shell 有关。

然后我创建了一个符号链接runweather

ln -s /usr/local/bin/runweather /etc/init.d/runweather

然后是另一个符号链接

ln -s /etc/init.d/runweather /etc/rc2.d/S99runweather

一些解释性说明

  1. 就是/usr/local/bin/echoweather.php在做所有真正的工作。它以 30 秒的间隔运行,不工作时休眠
  2. 在终止每次运行之前,它会放置一个临时 Redis 密钥$redis-setEx("weatherreport",29,$echoCount)`,我可以使用它来密切关注其运行状况
  3. echoweather.php将在启动时运行的 shell 脚本放在 中/usr/local/bin,然后将其/etc/init.d符号链接,然后再将其符号链接,/etc/rc2.d可能看起来很复杂。我这样做是因为我发现如果我将实际的 shell 脚本放入/etc/init.d然后将其符号链接到/etc/rc2.d它不会执行。

这个方案正在奏效。我重新启动了我的服务器几次,并通过 redis-cli 在 Redis中echoweather.php查找密钥来检查运行状况 - 始终存在且正确。weatherreport但是,在处理 Ubuntu 启动脚本时,我是一个业余爱好者。也许有更简单的方法来做事?我非常感谢任何能够发表评论的人。

autostart startup php redis
  • 1 个回答
  • 3170 Views
Martin Hope
DroidOS
Asked: 2020-01-22 06:00:21 +0800 CST

启用对 ArangoDB Web 界面的远程访问

  • 1

我目前正在尝试在我的 Ubuntu 18.04 服务器上安装 ArangoDB。ArangoDB 真正巧妙的地方之一是它提供了用于管理数据库的精心设计的 Web 界面。在我的 Windows 安装中,我可以通过浏览到http://127.0.0.1:8529/. 在我的服务器上,我确保 UFW 已配置为接受端口 8529 上的连接。当我 Telnet 到服务器上的 localhost 8529 时,我可以连接。但是,我无法从我的 Windows 台式机上执行此操作。我也无法通过浏览到 https://user:[email protected]:8529.

我非常感谢任何可能告诉我如何做到这一点的人——如果有可能的话。可能以某种方式涉及端口转发,但如果这需要我以某种方式在我的服务器上配置 Nginx,我之前没有这样做的经验。

remote-access nginx port-forwarding
  • 1 个回答
  • 764 Views
Martin Hope
DroidOS
Asked: 2015-12-17 06:31:55 +0800 CST

在启动时运行 Watcher

  • 1

我需要监视文件夹及其子文件夹中的更改,为此我正在使用Watcher 。到目前为止没有问题。但是,我想让 Watcher 守护进程在重新启动时运行。对于陈述者,我尝试了以下方法。

/etc/init.d

我在这里创建了以下简单脚本

#! /bin/bash
watcher.py start

watcher.py位于/usr/local/bin文件夹中。然后我从该/etc/rc2.d文件夹创建了一个符号链接ln -s /etc/init.d/watcher /etc/rc2.d/S99watcher并重新启动。

检查watcher.py status报告它没有运行。所以我修改了我的init.d脚本如下

#! /bin/bash
/usr/bin/python /usr/local/bin/watcher.py start

并重新启动。这次watcher.py status正确地报告了 Watcher 正在运行。

眼前的问题可能会解决,但我仍然不明白为什么。为什么在交互式 shell 提示符下我可以简单地键入watcher.py start以启动 Watcher 守护程序,而在启动时我需要明确告诉 Python 运行该脚本?

我通常是通过不放弃而不是深入了解这些东西是如何工作的来让我的 shell 和启动脚本工作的。我希望这里有人能够提供更明智的见解。

boot
  • 1 个回答
  • 442 Views
Martin Hope
DroidOS
Asked: 2015-12-04 08:24:25 +0800 CST

从 /etc/init.d 启动的 Ubuntu 服务以错误的 PID 结束

  • 0

这个问题是我上一个问题的后续问题。回顾一下

  • 我想在我的 Ubuntu 14.04 服务器上使用 OpenResty 而不是普通的 Nginx。
  • 我已经按照此处的说明编译了 OpenResty 。
  • 编译nginx结束在`/usr/local/openresty/nginx/sbin'
  • 我现在可以./nginx从该文件夹启动 nginx。

问题是如果我使用通过etc安装的 Nginx 的香草版本,我需要有能力做一些事情,就像service nginx status|reload|start|stop我通常会做的那样。apt-get install nginx|nginx-extras

我对这些问题的了解是非常基本的。但是,通过破解由此处描述的想法/etc/init.d/nginx创建的脚本apt-get install nginx并修改此处描述的想法,我创建了自己的/etc/init.d/nginx脚本,我在下面复制了该脚本

#!/bin/sh

NAME="nginx"
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"
APP="/usr/local/openresty/nginx/sbin/nginx"

if [ -r /etc/default/nginx ]; then
 . /etc/default/nginx
fi

. /lib/init/vars.sh
. /lib/lsb/init-functions

PID=$(cat /usr/local/openresty/nginx/conf/nginx.conf | grep -Ev '^\s*#' | 
awk 'BEGIN { RS="[;{}]" } { if ($1 == "pid") print $2 }' | head -n1)
if [ -z "$PID" ]
then
   PID=/var/run/nginx.pid
fi

if [ -n "$ULIMIT" ]; then
 ulimit $ULIMIT
fi

start() {
 printf "Starting '$NAME'... "
 start-stop-daemon --start --background --make-pidfile --pidfile    
 /var/run/$NAME.pid --exec "$APP"
 printf "done\n"
}

killtree() {
 local _pid=$1
 local _sig=${2-TERM}
 for _child in $(ps -o pid --no-headers --ppid ${_pid}); do
    killtree ${_child} ${_sig}
 done
 kill -${_sig} ${_pid}
}

stop() {
 printf "Stopping '$NAME'... "
 [ -z `cat /var/run/$NAME.pid 2>/dev/null` ] || \
 while test -d /proc/$(cat /var/run/$NAME.pid); do
  killtree $(cat /var/run/$NAME.pid) 15
  sleep 0.5
 done 
 [ -z `cat /var/run/$NAME.pid 2>/dev/null` ] || rm /var/run/$NAME.pid
 printf "done\n"
}

case "$1" in
 start)
   start
   ;;
 stop)
  stop
  ;;
 restart)
  stop
  start
  ;;
reload)
  start-stop-daemon --stop --signal HUP --quiet --pidfile /var/run/nginx.pid 
  --name nginx
  ;;            
status)
 status_of_proc -p /var/run/nginx.pid "nginx" "nginx" && exit 0 || exit $?
    ;;

*)
 echo "Usage: $NAME {start|stop|restart|reload|status}" >&2
 exit 1
 ;;
esac

exit 0

有了这个,如果我重新启动我的服务器并发出一个lsof -nP -i | grep LISTEN我得到输出

nginx     2247     root    6u  IPv4  14166      0t0  TCP *:80 (LISTEN)
nginx     2248   nobody    6u  IPv4  14166      0t0  TCP *:80 (LISTEN)

我在这里不明白的一件事 - 为什么有两个用户:root 和 nobody?因此,如果我从浏览器访问服务器并执行 PHP 脚本,它将以 - nobody,root ... 运行?

我检查了/var/run/nginx.pid。那里记录的 PID 是2146,即比上面和我运行时报告的少1 netstat -anp | grep 80。

我多次尝试最后一步 - 多次重新启动 - 结果总是一样。自然地,这意味着随后尝试重新加载或停止 Nginxservice nginx reload并service nginx stop失败:WRONG PID!

当我手动编辑/var/run/nginx.pid以确保它具有正确的PID 时,一切都按预期工作。

我不得不承认,我的工作超出了我对这些问题在这里如何运作的了解。如果能帮助解决我在这里遇到的问题,我将不胜感激。

14.04
  • 1 个回答
  • 1151 Views
Martin Hope
DroidOS
Asked: 2015-12-04 05:02:07 +0800 CST

在 Ubuntu 14.04 上将 OpenResty 作为服务运行

  • 0

我需要将 Nginx 与 Lua 一起使用,并且启用了一堆其他扩展,所以我按照https://openresty.org/上的说明进行了编译,并编译了 Nginx 的 OpenResty 变体。这个过程非常顺利,现在我在/usr/local/openresty/nginx/sbin/. 我执行时报告的版本./nginx -v是 1.9.3.2 - 正确。我可以通过执行来启动并运行服务器./nginx。

但是,我希望能够做的是让它在启动时作为服务运行,就像您通过apt-get install nginx. 我还希望能够使用诸如service nginx status|restart|stop|reloadetc 之类的命令。对于这类事情,我是一个彻头彻尾的新手。我试图理解/etc/init.d/nginx我的另一台服务器上脚本的内容,但修改它以与当前安装一起工作并不是我所理解的。我希望这里有人能够提供帮助。

14.04
  • 1 个回答
  • 3897 Views
Martin Hope
DroidOS
Asked: 2015-09-30 01:14:14 +0800 CST

Crosswalk 所说的“蚂蚁之路”是什么?

  • 4

我正在设置 Ubuntu 14.04 服务器来试验Crosswalk。我已经安装了 Java JDKapt-get install default-jdk和 ANT apt-get install ant,. whereis java回报/usr/bin/java和whereis ant回报/usr/bin/ant。让我感到困惑的是下一步:Configure The Tools 其中指出

export PATH=<path to ant>/bin:<path to JDK>/bin:$PATH

目前尚不清楚我应该如何解释这一点。留给我自己的设备我可能已经完成了

export PATH=/usr/bin/ant

但看起来这并不是他们的建议。这对我来说是未知的领域。我将不胜感激任何帮助。

java
  • 1 个回答
  • 222 Views
Martin Hope
DroidOS
Asked: 2015-05-27 03:43:27 +0800 CST

删除 Ubuntu Docker 安装的手册页

  • 12

我正在尝试减少我的 Ubuntu docker 映像的占用空间。鉴于 man 文件的用处很小,我删除了它们,提交了映像,然后尝试使用它。AFAICT 它没有伤害。但是,我认为值得在这里问。我这样做是不是在为将来埋下任何丑陋的问题?

manpage
  • 2 个回答
  • 8072 Views
Martin Hope
DroidOS
Asked: 2015-04-25 00:39:43 +0800 CST

Ubuntu 桌面新手

  • 2

我在我所有的服务器上都使用 Ubuntu,并且对它感觉非常自在。但是,我才刚刚开始在我的笔记本电脑上使用 Ubuntu,并且遇到了几个小问题。我希望这里有人能够帮助我解决这些问题。

  • 我切换到 Ubuntu 14.04 Desktop,因为我的笔记本电脑上的硬盘在使用 Windows 时死机了。
  • 我仍然没有硬盘,所以我在 32Gb USB 驱动器上安装了 Ubuntu。虽然这个工作我发现它很慢(我有一个非常强大的 Fujitsu Lifebook SH570 所以机器不是问题)。这是因为 USB 还是它的大小?
  • 其他一切似乎也很慢——例如保存文件、启动/关闭应用程序……。如果安装替换硬盘驱动器,性能会有所提高吗?
  • 我正在使用 Ubuntu 的文件管理器直接通过 SFTP 访问我的一些服务器。虽然这有效,但我发现当我保存一个文件时,我会以这种方式打开以进行编辑,并创建一个扩展名为 .giosave#### 的中间文件。这让我的服务器上的 INCRON 无休止地感到困惑。有什么办法可以避免这种情况吗?

我将不胜感激任何帮助。

14.04
  • 1 个回答
  • 477 Views
Martin Hope
DroidOS
Asked: 2014-12-21 07:58:57 +0800 CST

用于 Docker 容器的 Ubuntu

  • 4

Ubuntu 是适合在 Docker 容器内使用的发行版吗?如果是这样,Ubuntu如何安装

docker pull ubuntu

与 Ubuntu 14.04 有何不同?

14.04
  • 1 个回答
  • 3497 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve