标签: shell-scripting

为什么这个 bash 脚本不起作用?

我正在制作一个 bash 脚本来检查磁盘上的可用空间:

if [ check_space -gt "85" ]; then
echo "removing"
else
echo "not removing"
fi
Run Code Online (Sandbox Code Playgroud)

check_space返回一个数字52,check_space函数是:

check_space() {
df /dev/sda1 | tail -1 | awk '{print $5}' | sed 's/%//';
}
Run Code Online (Sandbox Code Playgroud)

它正在返回./backup.sh: line 63: [: check_space: a full expression was expected(我从西班牙语翻译它,所以可能不是准确的翻译)。可能有什么问题?

scripting linux bash shell-scripting

1
推荐指数
1
解决办法
279
查看次数

无法从 cron 作业重新启动 mysql

我有一个问题,即 MySQL(在 Ubuntu 12.04 上运行所有最新更新)在几天后死亡,因此将此脚本放入一个 cron 作业中,该作业每 60 秒以 root 身份运行。

一切正常,除了 mysql 服务不会重新启动,我试过使用“service mysql restart”和“/usr/bin/mysqld”,但它们也不起作用。

我正在使用完整路径来重新启动命令,所以我认为这不是问题。现在唯一有效的是用“重启”替换重启命令,这非常难看,我想避免它。

#!/bin/bash
#Check if MySQL is up, if not then start it
# mysql root/admin username
MUSER="root"
# mysql admin/root password
MPASS="REMOVED"
# mysql server hostname
MHOST="localhost"
#Shell script to start MySQL server i.e. path to MySQL daemon start/stop script.
# Debain uses following script, need to setup this according to your UNIX/Linux/BSD OS.
MSTART="/etc/init.d/mysql restart"
# Email ID to send notification
EMAILID="some@email.net"
# …
Run Code Online (Sandbox Code Playgroud)

mysql linux ubuntu bash shell-scripting

1
推荐指数
1
解决办法
1372
查看次数

根 crontab 不执行脚本

我的根 crontab 中列出了一个脚本

07 9 * * * /opt/HLRSDATA_2010_OCT/HLRS_Scheduler_sp.sh > /opt/HLRSDATA_2010_OCT/logs/HLRTKJob.log
Run Code Online (Sandbox Code Playgroud)

该脚本包含以下内容

#!/bin/bash
echo HLRSData Scheduler
cd /opt/HLRSDATA_2010_OCT
/usr/bin/java -Xms32m -Xmx1024m -cp ".:HLRSDATA_Premium.jar:lib/commons-net-1.4.1.jar:lib/jakarta-oro-2.0.8.jar:lib/mysql-connector-java-3.1.12-bin.jar:lib/x
ercesImpl.jar" mx.com.txm.hlrsdata.scheduler.HLRS_Scheduler

/opt/HLRSDATA_2010_OCT/HLRS_Scheduler_Reports_sp.sh

/opt/HLRSDATA_2010_OCT/HLRS_Scheduler_Reports_Redundant_sp.sh
/opt/HLRSDATA_2010_OCT/HLRS_Delete_Data_sp.sh
/opt/HLRSDATA_2010_OCT/HLRS_Delete_Data_Redundant_sp.sh
/opt/HLRSDATA_2010_OCT/HLRS_Delete_Files.sh
Run Code Online (Sandbox Code Playgroud)

脚本没有运行,我检查了 /var/log/cron ,甚至没有任何迹象表明它至少试图运行某些东西。

日志:

Oct 18 08:47:19 isvahlrtk01 crontab[46449]: (root) END EDIT (root)
Oct 18 08:47:22 isvahlrtk01 crontab[46455]: (root) BEGIN EDIT (root)
Oct 18 08:47:35 isvahlrtk01 crontab[46455]: (root) REPLACE (root)
Oct 18 08:47:35 isvahlrtk01 crontab[46455]: (root) END EDIT (root)
Oct 18 08:57:18 isvahlrtk01 crontab[46540]: (root) LIST (root)
Oct 18 09:00:18 …
Run Code Online (Sandbox Code Playgroud)

automation linux cron shell-scripting rhel6

1
推荐指数
1
解决办法
6140
查看次数

linux/solaris 用一个命令杀死许多进程

是否可以用一个命令杀死所有查找进程?

我不想杀死每个进程kill -9 25295,例如kill -9 11994,等等。相反,我想要的是一种简单的方法或命令来杀死所有查找进程(我的目标是在 linux 和 solaris 机器上执行此操作)。

$ ps -ef | grep find 
root 25295 25290   0 08:59:59 pts/1 0:01 find /etc -type f -exec grep -l 100.106.23.152 {} ; -print
root 11994 26144   0 09:04:18 pts/1 0:00 find /etc -type f -exec grep -l 100.106.23.153 {} ; -print
root 25366 25356   0 08:59:59 pts/1 0:01 find /etc -type f -exec grep -l 100.106.23.154 {} ; -print
root 26703 26658   0 09:00:05 pts/1 …
Run Code Online (Sandbox Code Playgroud)

linux solaris kill process shell-scripting

1
推荐指数
1
解决办法
5757
查看次数

重新创建新链接并通过一个命令删除旧链接

根据 ln 手册页:

   man ln


   -f, --force
          remove existing destination files
Run Code Online (Sandbox Code Playgroud)

据我了解,如果我想重新创建指向某个目标目录/文件的新链接

我可以简单地做

    ln -s -f some_directory new_link
Run Code Online (Sandbox Code Playgroud)

但这不是我从我的 linux/solaris 机器上得到的

例如

  [u@h w]# mkdir dir1
  [u@h w]# ln -s dir1 link
  [u@h w]# ls -l


  drwxr-xr-x 2 root root 4096 Mar 16 20:26 dir1
  lrwxrwxrwx 1 root root    4 Mar 16 20:27 link -> dir1




   [u@h w]# ln -s -f dir1 new_link
Run Code Online (Sandbox Code Playgroud)

现在我接受看到 new_link 现在指向 dir1 而“链接”不存在但链接仍然指向 dir1 ?

如何在一个命令中重新创建新链接并同时删除旧链接?

(我不想使用 rm 命令)

  [u@h w]# ls -l …
Run Code Online (Sandbox Code Playgroud)

linux solaris bash ksh shell-scripting

1
推荐指数
1
解决办法
994
查看次数

Nagios:缺少 bash

我正在 nagios 服务器上使用 nagios 和 nrpe 监视 NTP 服务器,当我收到以下错误时:服务状态未知状态信息我缺少一个重要组件:bash

该插件是:http : //archive.groundworkopensource.com/groundwork-opensource/trunk/monitor-core/nagios/plugins-contrib/check_procr.sh

我这样做时的输出bash -x check_procr.sh是:

+ myself=check_procr
+ verify_dep
+ needed='bash cut egrep expr grep let ps sed sort tail test tr wc'
++ echo bash cut egrep expr grep let ps sed sort tail test tr wc
+ for i in '`echo $needed`'
+ type bash /dev/null
+ '[' 1 -eq 1 ']'
+ echo 'I am missing an important component : bash'
I am missing …
Run Code Online (Sandbox Code Playgroud)

bash nagios nrpe shell-scripting

1
推荐指数
1
解决办法
428
查看次数

Shell脚本::从文件中读取一列并将其存储在数组中

我正在处理 shell 脚本,我想将命令的 O/P 存储在数组中。我有一个包含行和列的文件,我想从中提取第三列并将所有值存储在数组中。如果假设我的文件中有以下内容info.txt

  abc  xyz  pqr  akl
  mnt  var  man  lak
  qer  tag  sam  bob
Run Code Online (Sandbox Code Playgroud)

我想在数组中存储 pqr、man 和 sam 让我们调用 name[1], name[2], name [3]

有人可以帮我解决这个问题。

linux unix shell bash shell-scripting

1
推荐指数
1
解决办法
2万
查看次数

Cronjobs 将存档放在错误的目录中

我正在运行默认 Debian linux 的 Amazon ec2 实例上运行一个网站。我设置了一个 cronjob 来复制站点文件,获取数据库印记,然后将它们压缩。我想将文件存档保存在与 bash 脚本本身相同的目录中,该目录位于 /var/www/[a new directory]/[a new directory]/[etc]/ 中的深处。我创建了一个只能读取和转储数据库,但不能写入的 mysql 用户。

脚本如下

#/bin/bash

CURRPATH=$(pwd)
SITEPATH="/var/www/html"

MYSQLUSER="user"
MYSQLPASS="password"
MYSQLDB="database"

CURRDATE=$(date +"%Y-%m-%d__%T_%p")
DATETAG="Backup_$CURRDATE"
TEMPDIR="$CURRPATH/$DATETAG"
ARCHIVENAME="$DATETAG.zip"

# I first copy the files so I can stick a database imprint in the same directory
cp -r  "$SITEPATH/" "$CURRPATH/"
mv "$CURRPATH/html" "$TEMPDIR"
mysqldump -u "$MYSQLUSER" -p"$MYSQLPASS" "$MYSQLDB" > "$TEMPDIR/BackupDB_$CURRDATE.sql"

cd $CURRPATH
zip -r "$ARCHIVENAME" "$DATETAG"
rm -rf "$TEMPDIR"
Run Code Online (Sandbox Code Playgroud)

我用 crontab 设置了这个,它完美地工作,除了一个问题 - 存档最终在 ~/root 文件夹中(我用 root 用户设置了 …

debian bash cron shell-scripting

1
推荐指数
1
解决办法
76
查看次数

多次尝试该命令

我需要执行一个命令并检查它是否成功。如果出现错误,我应该再试一次,以下代码按预期工作。

但是如果我需要尝试相同的命令 3 或 4 次直到它成功执行怎么办?if / else 子句将变得非常复杂。

some command

if [ $? -eq 0 ];then
echo "success"
else 

echo "failed first attempt trying again"

some command

if [ $? -eq 0 ];then
echo "success in second attempt"
else
echo "failed second attempt"
fi

fi
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来编写一个脚本,在退出前尝试该命令 4 次?

scripting shell shell-scripting

1
推荐指数
1
解决办法
5651
查看次数

提供对 Windows 服务的网络驱动器访问

我有一个 Windows 服务,它需要访问网络驱动器。由于 Windows 服务不执行交互式登录,因此无法使用来自活动目录用户登录脚本的映射驱动器。哪个是为此类 Windows 服务提供网络驱动器的最佳安全且优雅的方式?辅助脚本?或者,还有其他解决方案吗?

/Windows 2008

更新:不幸的是,此服务不允许使用 UNC 路径,否则我们很乐意使用我们的域共享。

访问网络共享是我们的要求。服务能够使用映射到字母的共享。不过,这不是最优雅的方式。

windows service startup-scripts shell-scripting

1
推荐指数
1
解决办法
4352
查看次数