我知道这个问题之前已经有很多不同的问题,但是我仍然在摸不着为什么我不能让这个问题起作用.
首先,我有两个SLES服务器设置,它们是服务器A和服务器B,它们都运行在一个小型专用网络上,只能由一个专门的团队访问.
服务器A配置为运行Apache,PHP,MYSQL和ssh的Web服务器,所有这些服务器都运行无问题.
服务器B用于运行安装和激活ssh的内侧任务.
我已经在服务器A上创建了我的rsa密钥,并将其安装在服务器B上,当在命令行运行时,我会立即登录,不需要输入密码.我在服务器A上为root和nobody帐户重复了这个过程.
我已将这个PHP页面添加到服务器A,如下所示:
<?php
shell_exec('ssh root@192.162.0.5 ./StartTest.sh');
header("Location: archive.php?page=home");
?>
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时它不会创建我的文件夹.如果我从命令行运行它,它适用于两者(我想两者,我不记得我是否尝试过现在cli上的nobody帐户)root&nobody帐户.我甚至将无人帐户添加到根组,但仍然没有快乐.
我在这里错过了一些东西吗?我想做的就是通过php&ssh从服务器A连接到服务器B来执行一个命令并重定向到网站上的另一个页面.
由于我的对乙酰氨基酚库存不足,所以任何帮助都会受到赞赏.
这是我的foobar.sh的代码:
!#/bin/bash
while [ 1 ]
do
pid=`ps -ef | grep "mylittleprogram" | grep -v grep | awk ' {print $2}'`
echo $pid
if [ "$pid"="" ]
then
echo "Process has ended lets get this show on the road..."
exit
else
echo "Process has not ended yet"
fi
sleep 6
done
Run Code Online (Sandbox Code Playgroud)
我基本上运行一个infinate循环,一旦受监视的进程结束就会执行命令X但是当我的脚本循环时我最终收到以下消息:
./foobar.sh: line 7: [: missing `]'
Process has not ended yet
Run Code Online (Sandbox Code Playgroud)
有没有办法让脚本接受零反馈将触发我的'Then'语句并执行命令X,因为它不喜欢当前的方法.
基本上这是我的代码:
bay=$(prog -some flags)
while [ $bay = "Another instance of this program is running, please exit it first" ]
do
echo "Awaiting Access to program"
do
.....
Run Code Online (Sandbox Code Playgroud)
我有一个程序,它只允许一个实例一次运行,因为它与我的硬件交互的方式,当另一个实例运行时它踢出以下消息"该程序的另一个实例正在运行,请先退出它" .
我需要能够运行多个脚本,这将使用相同的程序,所以我决定使用上面的代码.我的问题是,当我运行我的两个脚本时,一个人将获得对程序的访问并按照需要运行,但另一个将注意到错误,然后卡在一个无限循环中,回显"等待访问程序".
错过了什么?Statement是执行CLI命令还是只是重新执行其原始执行?或者我的问题在哪里?
我之前没有使用过SQLite,但是我一直在讨论它.我需要将select查询的结果插入到现有表中,但即使经过一些冗长的Web阅读,我仍然无法完成这个简单的任务.我正在使用SQLite Studio来管理我的数据库,他们的网站提出了一种方法,但它似乎不起作用,因为SQLite Studio会抛出"附近"INSERT":语法错误.有人可以帮助我或者请指出我正确的语法方向.
谢谢你
好吧,我知道我问过类似的问题,我了解如何进行无限循环:
while [ 1 ]
do
foo
bar
then
sleep 10
done
Run Code Online (Sandbox Code Playgroud)
但是,如果我想在这个循环中运行一些(相当多的)IF ELSE 语句,一旦它们完成,我将如何让脚本继续循环,我将如何处理这个问题?
我需要从多台机器运行一个脚本,但每台机器都需要执行唯一的命令.
我认为bash脚本可以做到这一点,但我在这个部门并不太精明.
我需要的代码看起来类似于下面的代码(或者它会).我知道它远非完美或功能性,但它真的只是为了帮助表达我正在寻找的东西.
有人可以帮我这个剧本吗?
#/bin/bash
IP= ifconfig eth0 | grep inet | grep -v inet6 | cut -c 7-17
If [$IP -eq 192.168.32.1]
then mkdir IPFolder-1
more code...
else
if [$IP -eq 192.168.32.2]
then mkdir IPFolder-2
more code...
else
if [$IP -eq 192.168.32.5]
then mkdir IPFolder-5
more code...
Run Code Online (Sandbox Code Playgroud) 使用Sam Ruby给我的一个改编的例子 我已经调整过,所以我可以展示我想要实现的目标.
app1=$(someapp -flag | grep usefulstuff | cut -c 5-10)
if [$app1 = (someapptwo -flag | grep usefulstuff | cut -c 20-25)]; then
mkdir IPFolder-1
elif ...blah blah
fi
Run Code Online (Sandbox Code Playgroud)
我可以使用上面显示的grep,还是我在错误的树上吠叫?或者看起来像这样的东西:
app1=$(someapp -flag | grep usefulstuff | cut -c 5-10)
app2=$(someapptwo -flag | grep usefulstuff | cut -c 20-25)
if [$app1 = $app2]; then
mkdir IPFolder-1
elif ...blah blah
fi
Run Code Online (Sandbox Code Playgroud) 我之前使用过该&命令使脚本在后台运行另一个脚本,如下所示:
#!/bin/bash
echo "Hello World"
script1.sh &
script2.sh &
echo "Please wait..."
Run Code Online (Sandbox Code Playgroud)
但是让我说我有另一个带有IF ELSE语句的脚本,我想设置一个ELIF语句mid flow作为后台任务,&然后继续处理剩下的脚本,因为知道ELIF的其余部分将进行运行在后台:
#!/bin/bash
if cond1; then
stuff
sleep 10 &
stuff
stuff
elif cond2; then
something else
else
echo "foo"
fi
stuff
echo "Hello World"
Run Code Online (Sandbox Code Playgroud)
我真的希望这是有道理的任何帮助将不胜感激.
bash ×6
shell ×5
if-statement ×4
linux ×4
while-loop ×3
grep ×2
do-while ×1
php ×1
scripting ×1
shell-exec ×1
sqlite ×1
ssh ×1
unix ×1