Reputation: 5089
I want to write some image downloader and assign it on bash. What I have and what I need:
I have:
wget
http://mywebcam.com/image.jpg -O /var/cam/Image.jpg
)Root rights
Fast Internet line between my server and my webcam
What I need:
Download image from camera every second*(sleep 1?)* and rewrite it localy (my command do it well) Run this script at once and don't worry about restart (I think I need to create file with bash commands and run it once + set crontab work "on reboot" to this file, right?)
Maybe there's someone who knows what should I to do?
Upvotes: 79
Views: 82554
Reputation: 212228
If you want to run a command at one second intervals (one second between the end of one command and the beginning of the next, which is not the same as running every second), just do:
while sleep 1; do cmd; done
If you want that to start on reboot, the method will depend on your system.
Note that it is certainly possible to start an execution every second rather than running at one second intervals, but I suspect that is not actually what you want. In addition, there are inherent risks with doing so. For example, if the system gets sluggish and the command starts taking longer than one second to run you may run out of resources.
Upvotes: 158
Reputation: 574
To add my two cents to this... If the cron's one minute interval is too long for you, you can take advantage of the systemd's capability to restart services repeatedly.
[Unit]
Description=Poll something each second
[Service]
Type=simple
ExecStart=/opt/poller/poll.sh
Restart=always
RestartSec=1
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
I know it's a messy and sort of "never ever do this" approach. But it works perfectly an is fairly simple to set up.
Upvotes: 2
Reputation: 3772
The command watch
will do this for you straight up. It also displays the result in a nice way.
$ watch -n 1 date
Substitute date
for your command. The -n
option specifies the interval in seconds.
Upvotes: 93