命令的目的是什么,什么都不做,只是一个评论领导者,但实际上是一个内置的shell?
它比在每个调用中将注释插入脚本大约40%要慢,这可能会根据注释的大小而有很大差异.我能看到的唯一可能的原因是:
# poor man's delay function
for ((x=0;x<100000;++x)) ; do : ; done
# inserting comments into string of commands
command ; command ; : we need a comment in here for some reason ; command
# an alias for `true' (lazy programming)
while : ; do command ; done
Run Code Online (Sandbox Code Playgroud)
我想我真正想要的是它可能具有的历史应用.
确保只有给定脚本的一个实例运行的最简单/最好的方法是什么 - 假设它是Linux上的Bash?
目前我正在做:
ps -C script.name.sh > /dev/null 2>&1 || ./script.name.sh
Run Code Online (Sandbox Code Playgroud)
但它有几个问题:
-C 仅检查进程名称的前14个字符当然,我可以编写自己的pidfile处理,但我觉得应该有一个简单的方法来实现它.
我想阻止我的脚本一次运行多次.
我目前的做法是
为了防止进程挂起,我设置了一个cron作业,定期检查文件是否超过了最大允许的运行时间,如果文件仍然在运行,则会终止该进程.
是否存在我正在杀死错误进程的风险?
有没有更好的方法来执行这个整体?
GNU bash,版本1.14.7(1)
我有一个脚本被称为" abc.sh"我必须从abc.sh脚本中检查这个...在其中我写了以下语句
status=`ps -efww | grep -w "abc.sh" | grep -v grep | grep -v $$ | awk '{ print $2 }'`
if [ ! -z "$status" ]; then
echo "[`date`] : abc.sh : Process is already running"
exit 1;
fi
Run Code Online (Sandbox Code Playgroud)
我知道这是错的,因为每次它退出,因为它在'ps'中找到了自己的进程如何解决它?如何检查脚本是否已经运行from that script?
Counting和二进制信号量有什么区别.
我在某处看到的是,两者都可以控制已请求资源的N个进程.两者都采取了自由状态.
二元信号量和计数信号量可以保护多少资源是否有任何限制?
两者都只允许一个进程一次使用一个资源......
还有其他区别吗?上述属性是否正确?
我在这里检查过一个解决方案,但似乎找不到一个.我正在处理一个非常慢的WAN连接,大约300kb /秒.对于我的下载,我使用的是远程盒子,然后我将它们下载到我家.我正在尝试运行一个cronjob,它将每小时在我的远程和本地服务器上rsync两个目录.我得到了一切正常但如果有很多数据要传输rsyncs重叠并最终创建同一文件的两个实例,从而发送重复数据.
我想改为调用一个运行我的rsync命令的脚本,但仅当rsync没有运行时?
我正在编写将并行运行的脚本,并将从同一个文件中获取输入数据.这些脚本将打开输入文件,读取第一行,存储它以供进一步处理,最后从输入文件中擦除此读取行.
现在问题是访问文件的多个脚本可能导致两个脚本同时访问输入文件并读取同一行的情况,这会产生两次处理行的不可接受的结果.
现在一个解决方案是.lock_input在访问输入文件之前编写一个锁文件(),然后在释放输入文件时将其擦除,但是这种解决方案在我的情况下并不吸引人,因为有时NFS会随机减慢网络通信速度并且可能没有可靠的锁定.
另一种解决方案是放置进程锁而不是编写文件,这意味着访问输入文件的第一个脚本将启动一个名为lock_input的进程,其他脚本将启动ps -elf | grep lock_input.如果它出现在进程列表中,它们将等待.这可能比写入NFS更快,但仍然不是完美的解决方案......
所以我的问题是:是否有任何bash命令(或其他脚本解释器)或我可以使用的服务,其行为类似于线程编程中用于同步的信号量或互斥锁?
谢谢.
小粗略的例子:
假设我们有input_file如下:
Monday Tuesday Wednesday Thursday Friday Saturday Sunday
治疗脚本:TrScript.sh
#!/bin/bash
NbLines=$(cat input_file | wc -l)
while [ ! $NbLines = 0 ]
do
FirstLine=$(head -1 input_file)
echo "Hello World today is $FirstLine"
RemainingLines=$(expr $NbLines - 1 )
tail -n $RemainingLines input_file > tmp
mv tmp input_file
NbLines=$(cat input_file | wc -l)
done
Run Code Online (Sandbox Code Playgroud)
主要脚本:
#! /bin/bash
./TrScript.sh &
./TrScript.sh &
./TrScript.sh &
wait
Run Code Online (Sandbox Code Playgroud)
结果应该是:
Hello …
我有一个bash脚本我想从cron每5分钟运行一次...但是有可能前一次运行的脚本还没有完成......在这种情况下,我希望新的运行只是退出.我不想只依赖/ tmp中的锁文件..我想确保在我尊重锁文件(或其他)之前该进程实际上正在运行...
这是我到目前为止从互联网上窃取的内容......我如何让它变得有点聪明?还是有一种完全不同的方式更好?
if [ -f /tmp/mylockFile ] ; then
echo 'Script is still running'
else
echo 1 > /tmp/mylockFile
/* Do some stuff */
rm -f /tmp/mylockFile
fi
Run Code Online (Sandbox Code Playgroud) 我已经设置了一个cronjob来正确备份我的文件夹,我很自豪.但是,我通过查看备份的结果发现,我的备份脚本已被Crontab多次调用,导致同时运行多个备份.
有没有什么办法可以确保某个shell脚本在同一个脚本已经执行时不能运行?
我有一个每15分钟运行一次的脚本,但有时如果盒子忙,它会挂起,下一个过程将在第一个完成创建雪球效果之前开始.如何在bash脚本中添加几行以在启动之前检查某些内容是否先运行?