我有两台(Debian)Linux 服务器。我正在创建一个shell脚本。
在第一个上,我创建了一个数组:
#!/bin/bash
target_array=(
"/home/user/direct/filename -p123 -r"
)
Run Code Online (Sandbox Code Playgroud)
这很好用。但是当我在另一台服务器上运行它时,我得到:
Syntax error: "(" unexpected
Run Code Online (Sandbox Code Playgroud)
据我所知,两台服务器都是一样的。任何人都可以解释为什么这不起作用?
如果我直接在终端中输入它就可以了??
看起来当我运行它时
sh scriptname.sh
Run Code Online (Sandbox Code Playgroud)
我收到错误,但如果我运行它
./scriptname.sh
Run Code Online (Sandbox Code Playgroud)
好像没问题。有什么不同?
我刚刚在我的测试服务器上安装了haproxy。
有没有办法让它将日志写入本地文件,而不是系统日志?
这仅用于测试,所以我不想开始打开端口/用我的所有测试数据弄乱系统日志。
不幸的是,我能找到的唯一信息都是关于登录到系统日志服务器的。
我尝试使用:
log /home/user/ha.log local0
Run Code Online (Sandbox Code Playgroud)
在我的配置中。但这告诉我:
[ALERT] 039/095022 (9528) : sendto logger #1 failed: No such file or directory (errno=2)
Run Code Online (Sandbox Code Playgroud)
当我重新启动。所以我创建了文件touch /home/user/ha.log并重新启动,此时我得到:
[ALERT] 039/095055 (9593) : sendto logger #1 failed: Connection refused (errno=111)
Run Code Online (Sandbox Code Playgroud)
这是可能的,还是我必须配置 syslog 等才能查看我的测试数据?
我最近开始将我的数据库服务器从 Debian 9 升级到 Debian 12。然而,Debian 12(实际上是 11)似乎很容易进行交换,而 Debian 9 从未这样做过。
因此,我想将 的值vm.swappiness从当前值 5 更改为 1,看看这是否会产生影响。
无论我看什么,都表明我只需将条目添加vm.swappiness = 1到文件末尾即可/etc/sysctl.conf。
我已经这样做了(并检查其中没有其他条目)并重新启动服务器几次,但每次它回来并告诉我仍然是vm.swappiness5。
我假设因此必须在其他地方设置此设置,但谷歌搜索它并没有帮助,到处都说它应该在/etc/sysctl.conf.
任何人都可以建议另一个可能设置的位置吗?
我有一个目录:
/var/lib/mysql/test_db/
其中包含构成test_db数据库的许多文件
我现在已经创建了一个新目录:
/var/lib/mysql/data/
我正在尝试将test_db目录及其内容移动到data目录中。
我试过各种命令围绕
sudo mv /var/lib/mysql/test_db/ /var/lib/mysql/data/test_db/
Run Code Online (Sandbox Code Playgroud)
但我不断收到错误消息:
mv: cannot move /var/lib/mysql/test_db/ to /var/lib/msyql/data/test_db/: No such file or directory
Run Code Online (Sandbox Code Playgroud)
但如果我跑:
ls -lah
我得到
drwxrwxrwx 2 root root 32K Mar 27 15:58 test_db
drwxrwxrwx 3 mysql mysql 4.0K Mar 30 10:51 data
Run Code Online (Sandbox Code Playgroud)
据我所知,这意味着它们都是目录,因此都存在。
如您所见,我已更改了它们的权限 ( chmod 777 test_db),但这不起作用。
我错过了什么?
我有一个名为的文件,listing.txt
它包含如下数据:
1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)
然后,我使用以下命令循环遍历文件并对每一行执行操作:
IFS=$'\n'
while IFS= read -r inc; do
if [ $inc -eq 1 ]
then
echo "FIRST: $inc"
else
echo "MID: $inc"
fi
done </home/user/listing.txt
Run Code Online (Sandbox Code Playgroud)
但我找不到检查它是否是最后一行的选项。如果我在最后一行,最好的查找方法是什么?
我见过许多讨论循环的页面,以及讨论从文件中获取最后一行的页面,但没有任何内容可以帮助我的循环知道它在最后一行。
我正在尝试将 mysqldump 文件导入我的 mysql 数据库,但我与服务器的(腻子)连接在中途一直超时。
我尝试使用,nohup . . . . &但这似乎不起作用。
我的命令是
nohup sudo mysql -hlocalhost -P3306 -uxxxxxx -pxxxxxx < /var/lib/mysql/backups/dump.sql &
Run Code Online (Sandbox Code Playgroud)
我认为应该在后台运行它,并在我与服务器的连接中断后继续存在。但是,当我输入jobs以查看它是否正在运行时,它说:
[1] Stopped nohup sudo mysql -hlocalhost -P3306 -uxxxxx -pxxxxx < /var/lib/mysql/backups/dump.sql
Run Code Online (Sandbox Code Playgroud)
是我做错了什么,还是我完全误解了 nohup . . . . &
如果我有一个字符串,例如
/home/user/a/directory/myapp.app
Run Code Online (Sandbox Code Playgroud)
要不就
/home/user/myapp.app
Run Code Online (Sandbox Code Playgroud)
how can I split this so that I just have two variables (the path and the application)
e.g.
path="/home/user/"
appl="myapp.app"
Run Code Online (Sandbox Code Playgroud)
I've seen numerous examples of splitting strings, but how can I get just the last part, and combine all the rest?
我在 Linux 服务器上运行 Wine 以便运行一些旧的 Windows 应用程序。
我现在需要编写一个脚本来确保它们正在运行。
是否可以创建到服务器的 ssh 连接并启动应用程序?
例如,如果我在桌面上,打开一个终端窗口并运行
wine "Z:\home\user\Desktop\application"
Run Code Online (Sandbox Code Playgroud)
应用程序打开。但是如果我通过 SSH 连接并运行
wine "Z:\home\user\Desktop\application"
Run Code Online (Sandbox Code Playgroud)
我得到:
Application tried to create a window, but no driver could be loaded.
Make sure that your X server is running and that $DISPLAY is set correctly.
err:systray:initialize_systray Could not create tray window
Application tried to create a window, but no driver could be loaded.
Make sure that your X server is running and that $DISPLAY is set correctly.
Run Code Online (Sandbox Code Playgroud)
我假设我需要告诉它从哪里 …
我正在 MySQL 上安装时区表,这些表是从/usr/share/zoneinfo我的 Debian 服务器上生成的。
但注释中有一点是关于确保每当更新 zoneinfo 文件时我都会保持它们是最新的。
我用谷歌搜索过,但找不到问题的答案:
How often is `/usr/share/zoneinfo` updated?
Run Code Online (Sandbox Code Playgroud)
Linux 操作系统是每次更新还是不经常更新?
我缺少什么?
我想找出目录中有多少文件与给定模式匹配并将其分配给变量。
如果我直接在命令行上输入它,它就可以正常工作
ls /backups/system\ db\ files/temp/daily/backup_filename_202203*.tar.gz | wc -l
Run Code Online (Sandbox Code Playgroud)
(注意,*是创建备份的日期,例如01、02等03)
但一旦我将它添加到我的 bash 脚本中,它就会失败。
到目前为止我有:
base_dir="/backups/system\ db\ files/temp"
sub_dir="${base_dir}/daily"
filename_base="backup_filename_"
Run Code Online (Sandbox Code Playgroud)
然后我尝试运行:
counter=$(ls ${sub_dir}/${filename_base_}202203*.tar.gz | wc -l)
Run Code Online (Sandbox Code Playgroud)
或带引号:
counter=$(ls "${sub_dir}/${filename_base_}202203*.tar.gz" | wc -l)
Run Code Online (Sandbox Code Playgroud)
第一个失败,因为它尝试根据空格分割它。第二个不扩展*来查找通配符。
我尝试过引用其中的一些内容,例如
counter=$(ls "${sub_dir}/${filename_base_}"202203*.tar.gz | wc -l)
Run Code Online (Sandbox Code Playgroud)
但它再次忽略了通配符。
我一直在寻找,但我一生都找不到一种方法来获取匹配文件的总数。
我有一个正在编写的 cron,它将每小时重复一次,我需要一种简单的方法将计数器从上次运行传递到下一次运行。
我的计划是在最后将数字添加到文件中,然后在开头调用它,例如
在第一次 cron 运行结束时:
INC_COUNT=1
echo $INC_COUNT > inc_counter.txt
Run Code Online (Sandbox Code Playgroud)
然后在第二次运行开始时:
INC_COUNT_FILE="inc_counter.txt"
OLD_INC_COUNTER=$(cat "$INC_COUNT_FILE")
Run Code Online (Sandbox Code Playgroud)
到目前为止一切顺利,但现在我需要增加这个数字。我试过:
NEW_INC_COUNTER="$OLD_INC_COUNTER"+1
NEW_INC_COUNTER="$OLD_INC_COUNTER+1"
Run Code Online (Sandbox Code Playgroud)
两者都没有奏效。增加这个数字的最佳方法是什么?
这些有什么区别:
SEC=$(mysql -hxxx -Pxxx -uxxx -pxxx -se "SELECT Seconds FROM tablename")
SEC=100
Run Code Online (Sandbox Code Playgroud)
两者都返回相同的结果 (100)。但是当我测试它时:
if [ ${SEC} > 1 ]
then
echo "SEC GT 1"
else
echo "SEC LT 1"
fi
Run Code Online (Sandbox Code Playgroud)
第一个返回:
"SEC GT 1"
Run Code Online (Sandbox Code Playgroud)
第二个返回:
"SEC LT 1"
Run Code Online (Sandbox Code Playgroud)
但是,如果我将其更改为:
if [ ${SEC} -gt 1 ]
Run Code Online (Sandbox Code Playgroud)
那么结果是相反的。
我假设它与数据类型有关,并且我大概需要cast其中一个来获得相同的结果。
只是目前它搞砸了我的测试,因为我必须记住IF每次都更改该部分。
我有以下代码:
testval="aaa_bbb_ccc,"
testval+="_ddd"
echo ${testval}
Run Code Online (Sandbox Code Playgroud)
但是,我需要去掉“ ccc ”后面的逗号。${testval}在我添加“ _ddd ”之前,它将始终是最后一个字符。可能还有其他逗号需要保留在字符串中。
但到目前为止,我找不到任何有效的方法。
例如
testval="aaa_bbb_ccc," ;
testval=${testval} | rev | cut -c 2- | rev ; testval+="_ddd" ;
echo ${testval}
Run Code Online (Sandbox Code Playgroud)
或者
testval="aaa_bbb_ccc," ;
testval=${testval} | sed 's/.$//' ; testval+="_ddd" ;
echo ${testval}
Run Code Online (Sandbox Code Playgroud)
两者都导致:
aaa_bbb_ccc,_ddd
Run Code Online (Sandbox Code Playgroud)
我也试过:
testval="aaa_bbb_ccc," ;
testval=$(${testval} | rev | cut -c 2- | rev) ;
testval+="_ddd" ;
echo ${testval}`
Run Code Online (Sandbox Code Playgroud)
和
testval="aaa_bbb_ccc," ;
testval=$(${testval} | sed 's/.$//') ;
testval+="_ddd" ;
echo ${testval}
Run Code Online (Sandbox Code Playgroud)
两者都导致:
-su: {testval}: command not found**
Run Code Online (Sandbox Code Playgroud)
没有等效的或 …