我正在制作一个 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(我从西班牙语翻译它,所以可能不是准确的翻译)。可能有什么问题?
我有一个问题,即 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) 我的根 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) 是否可以用一个命令杀死所有查找进程?
我不想杀死每个进程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) 根据 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) 我正在 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) 我正在处理 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]
有人可以帮我解决这个问题。
我正在运行默认 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 用户设置了 …
我需要执行一个命令并检查它是否成功。如果出现错误,我应该再试一次,以下代码按预期工作。
但是如果我需要尝试相同的命令 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 次?
我有一个 Windows 服务,它需要访问网络驱动器。由于 Windows 服务不执行交互式登录,因此无法使用来自活动目录用户登录脚本的映射驱动器。哪个是为此类 Windows 服务提供网络驱动器的最佳安全且优雅的方式?辅助脚本?或者,还有其他解决方案吗?
/Windows 2008
更新:不幸的是,此服务不允许使用 UNC 路径,否则我们很乐意使用我们的域共享。
访问网络共享是我们的要求。服务能够使用映射到字母的共享。不过,这不是最优雅的方式。