I know this borders on bike-shedding, but if you really want to run
something exactly 60 times per elapsed minute you need to compare calls
to clock_gettime(CLOCK_MONOTONIC). Nothing else will work reliably in
all cases, and certainly not signals. (if the system is lagged
significantly, two signals can be merged into one)
I'm not aware of any way to call clock_gettime from a shell script, but
Perl can do it. If you don't have perl and you still want it to be a
script for ease-of-maintenance, I would recommend:
1. write a very small C program that calls clock_gettime() for an
initial timestamp, writes "\n" on STDOUT, increment timestamp by exactly
1 second, calls clock_gettime(), and then usleep()s for the difference
between clock_gettime and timestamp, if greater than 0.
2. write a script that performs "./c_prog | while read; do
something(); done"
No special file descriptors, process IDs, signals or other mess, and
guaranteed one iteration of the script per every elapsed second (but no
guarantee that the execution occurs during that second. Linux isn't
realtime, afterall)
-Mike
On 3/6/2014 9:25 AM, Yan Seiner wrote:
On 03/05/2014 10:49 PM, Harald Becker wrote:
Hi Yan !
On 05-03-2014 09:14 Yan Seiner <[email protected]> wrote:
I am trying to run a script every second.
Beside what Laurent told about using sleep, etc.
first script (the one that does the work)
trap 'update' HUP
mknod /tmp/dummyfifo p
while true; do
read < /tmp/dummyfifo > /dev/null 2>&1
done
The problem is that the 'read' generates a
/usr/bin/update: line 1: can't open /tmp/dummyfifo: Interrupted
system call
The reason for this is you create your pipe once, but open it
again at every iteration of the loop.
Try the following:
mknod /tmp/dummyfifo p
exec 0</tmp/dummyfifo 1>/dev/null 2>&1
while true; do
read
done
This opens the fifo once and assigns it for stdin. After that it
stays open until the first script is terminated in any way.
In addition stdout *AND* stderr are redirected to /dev/null for
all following commands in the script, so you need to redirect to
any file or tty when you want do display something.
Thanks!
I like it. My solution leaves 'cat' processes behind if the script
gets killed. Usually not a problem since it's only invoked at boot.
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox